页面元素定位信息
页面元素定位信息文件
1[leadscloud_login] 2input_user_name = xpath>//*[@id='main']/div/div[2]/div[2]/div[2]/div/form/div[1]/div/div/input 3input_user_password = xpath>//*[@id='main']/div/div[2]/div[2]/div[2]/div/form/div[2]/div/div[1]/input 4button_login = xpath>//*[@id='main']/div/div[2]/div[2]/div[2]/div/form/div[3]/div/button
解析定位信息获取元素对象
解析定位信息
1""" 2用于解析配置文件,并获取页面元素定位表达式 3""" 4# -*- coding: utf-8 -*- 5# @Time: 2019/2/26 11:43 6# @Author : Yang DaWei 7# @Project : LeadsCloudAutomation 8# @FileName: ParseElementLocator.py 9from configparser import ConfigParser 10from time import sleep 11from selenium.webdriver.support.wait import WebDriverWait 12 13 14class ParseConfigFile: 15 """ 16 初始化解析文件类 17 """ 18 def __init__(self, driver, page_element_locator): 19 self.driver = driver 20 self.cf = ConfigParser() 21 self.cf.read(page_element_locator, encoding='utf-8') 22 23 def get_items_section(self, section_name): 24 """ 25 获取配置文件中指定section下的所有option_name键值对,并以字典类型返回给调用者 26 注意:使用self.cf.items(sectionName)此种方法获取到 27 配置文件中的options内容均被转换成小写,如loginPage.frame将被转换成loginpage.frame 28 """ 29 options_dict = dict(self.cf.items(section_name)) 30 return options_dict 31 32 def get_option_value(self, section_name, option_name): 33 """ 34 获取指定section下的指定option的值 35 """ 36 value = self.cf.get(section_name, option_name) 37 return value 38 39 def get_element_location(self, section_name, option_name, timeout): 40 """ 41 获取页面元素定位表达式,并以元素对象的形式返回给调用者 42 :param section_name: 43 :param option_name: 44 :param timeout: 45 :return: 46 """ 47 driver = self.driver 48 location = self.get_option_value(section_name, option_name) 49 location_type = location.split(">")[0] 50 location_value = location.split(">")[1] 51 print("读取到的定位类型为:" + location_type + "\t读取到的定位信息为:" + location_value) 52 try: 53 element = WebDriverWait(driver, timeout).until(lambda x: x.find_element(by=location_type, 54 value=location_value)) 55 return element 56 except Exception as e: 57 print("定位元素超过" + str(timeout) + "秒,详细异常信息入下:") 58 raise e 59 60 def highlight_element(self, driver, element): 61 """ 62 调用JS,用于高亮控件 63 :param driver: 64 :param element: 65 :return: 66 """ 67 driver.execute_script("arguments[0].setAttribute('style', arguments[1]);", element, 68 "background: yellow; border:2px solid red;") 69 70 71if __name__ == '__main__': 72 from selenium import webdriver 73 # from Config import VarConfig 74 from PageObject.Login_Page import Login_Page 75 # locator_file = VarConfig.login_page 76 77 driver = webdriver.Firefox() 78 driver.get("http://test.leadscloud.com/Front-Vue/#/login") 79 sleep(5) 80 Login_Page(driver).input_user_name().send_keys("yangdawei_10171") 81 # ge = ParseConfigFile(driver, locator_file) 82 # input_user_name = ge.get_element_location("leadscloud_login", "input_user_name", 5) 83 # ge.highlight_element(driver, input_user_name) 84 Login_Page(driver).input_user_password().send_keys("yangdawei_10166") 85 # input_user_password = ge.get_element_location("leadscloud_login", "input_user_password", 5) 86 # ge.highlight_element(driver, input_user_password) 87 # input_user_password.send_keys("111111") 88 # button_login = ge.get_element_location("leadscloud_login", "button_login", 5) 89 # ge.highlight_element(driver, button_login) 90 Login_Page(driver).login_button().click() 91 driver.quit()
页面元素对象封装
解析定位文件并封装成可操作对象
1'''用于获取PageElementLocator.ini 中Login页面元素对象''' 2# encoding = utf-8 3""" 4__title__ = '' 5__author__ = 'davieyang' 6__mtime__ = '2018/4/21' 7""" 8from Util.GetElements import * 9from Util.ParseElementLocator import ParseConfigFile 10 11 12class LoginPage(object): 13 14 def __init__(self, driver): 15 self.driver = driver 16 self.parseCF = ParseConfigFile() 17 self.loginOptions = self.parseCF.getItemsSection("163mail_login") 18 print(self.loginOptions) 19 20 def switchtoframe(self): 21 try: 22 # 从定位表达式配置文件中读取frame的定位表达式 23 locatorExpression = self.loginOptions["loginPage.frame".lower()].split('>')[1] 24 self.driver.switch_to.frame(locatorExpression) 25 except Exception as e: 26 raise e 27 28 def switchtodefaultframe(self): 29 try: 30 self.driver.switch_to.default_content() 31 except Exception as e: 32 raise e 33 34 def usernameobj(self): 35 try: 36 # 从定位表达式配置文件中读取定位用户名如输入框的定位方式和表达式 37 locateType, locatorExpression = self.loginOptions["loginPage.username".lower()].split(">") 38 # 获取登录页面的用户名输入框页面对象,返回给调用者 39 elementobj = get_element(self.driver, locateType, locatorExpression) 40 return elementobj 41 except Exception as e: 42 raise e 43 44 def passwordobj(self): 45 try: 46 # 从定位表达式配置文件中读取定位密码输入框的定位方式和表达式 47 locateType, locatorExpression = self.loginOptions["loginPage.password".lower()].split(">") 48 # 获取登录页面的密码输入框页面对象,并返回给调用者 49 elementoj = get_element(self.driver, locateType, locatorExpression) 50 return elementoj 51 except Exception as e: 52 raise e 53 54 def loginbutton(self): 55 try: 56 # 从定位表达式配置文件中读取定位登录按钮的定位方式和表达式 57 locateType, locatorExpression = self.loginOptions["loginPage.loginbutton".lower()].split(">") 58 # 获取登录页面的登录按钮页面对象,并返回给调用者 59 elementobj = get_element(self.driver, locateType, locatorExpression) 60 return elementobj 61 except Exception as e: 62 raise e 63 64 65if __name__ == '__main__': 66 from selenium import webdriver 67 import time 68 driver = webdriver.Chrome(executable_path="F:\\automation\\webdriver\\chromedriver.exe") 69 driver.get("http://mail.163.com") 70 time.sleep(5) 71 login = LoginPage(driver) 72 login.switchtoframe() 73 login.usernameobj().send_keys("xxxx") 74 login.passwordobj().send_keys("xxxx") 75 login.loginbutton().click() 76 time.sleep(10) 77 login.switchtodefaultframe() 78 assert u"未读邮件" in driver.page_source 79 driver.quit()
测试代码示例
测试脚本
1# -*- coding: utf-8 -*- 2# @Time: 2019/3/1 13:40 3# @Author : Yang DaWei 4# @Project : LeadsCloudAutomation 5# @FileName: test_login_page.py 6import time 7import unittest 8from selenium import webdriver 9from PageObject.Login_Page import Login_Page 10 11class Test_Login_Page(unittest.TestCase): 12 13 driver = None 14 @classmethod 15 def setUpClass(cls): 16 """ set Up method """ 17 cls.driver = webdriver.Chrome() 18 cls.test_page = '' 19 time.sleep(3) 20 21 def tearDown(self): 22 """ tear Down method """ 23 24 def setUp(self): 25 """setUP pass""" 26 27 @classmethod 28 def tearDownClass(cls): 29 """ tear Down method """ 30 cls.driver.close() 31 32 def test_login(self): 33 self.driver.get("http://admin.leadscloud.com/Front-Vue/#/") 34 Login_Page(self.driver).input_user_name().send_keys("yangdawei_10171") 35 Login_Page(self.driver).input_user_password().send_keys("111111") 36 Login_Page(self.driver).login_button().click() 37 try: 38 self.assertTrue("仪表盘", self.driver.page_source) 39 print("断言成功") 40 except Exception as e: 41 raise e 42 time.sleep(10)