前言
UI自动化测试中使用到的页面定位元素应该存放在哪里比较合适?我想说的是如果你使用的是PO设计模式设计测试用例的话,可以把定位元素存在每一个page页面或者单独存放在一个目录中新键不同页面对应不同名称的文件来存储定位方式,当页面变动的时只需修改对应页面对应的定位表达式文件即可,方便项目维护。还有一种就是存放在配置文件下,这样对于不懂得自动化测试的人员也可以配置,当然你可以根据自己的意愿进行选择。那么下面我看就来看一下如何存放到配置文件中?如何来读取并定位?
目录结构
测试地址:https://www.cnblogs.com/
测试步骤:1.打开网址2.搜索框输入python3.点击搜索按钮4.判断python是否包含在页面源码中
文件说明:Element.ini 存放定位元素。GetElement.py用来读取配置文件并查找页面元素。CnblogsTest.py用来编写测试用例
GitHub地址:https://github.com/yinzuopu/DataSeparate.git
实例代码
Element.ini
1 [cnblogs] 2 queryBox_id=id:zzk_search_input 3 queryBtn_id=id:zzk_search_button
GetElement.py
1 # -*- coding:GBK -*- 2 # 导入测试用模块 3 import os 4 import configparser 5 from selenium import webdriver 6 from selenium.webdriver.support.ui import WebDriverWait 7 8 9 # 创建获取对象类 10 class GetElement(): 11 """ 12 从配置文件中获取定位信息 13 """ 14 def __init__(self): 15 self.elementIni = os.path.dirname(os.path.abspath(__file__)) + r'\Element.ini' #配置文件路径 16 17 def getelement(self, driver, query_section, query_option): 18 try: 19 config = configparser.ConfigParser() 20 # 读取配置文件到内存中 21 config.read(self.elementIni) 22 locators = config.get(query_section,query_option).split(':') 23 query_box = locators[0] 24 query_btn = locators[1] 25 element = WebDriverWait(driver, 5).until(lambda x : x.find_element(query_box, query_btn)) 26 except Exception as e: 27 raise e 28 else: 29 return element 30 31 32 if __name__ == "__main__": 33 ele = GetElement() 34 print(ele.elementIni) 35 driver = webdriver.Firefox() 36 driver.get("https://www.cnblogs.com/") 37 element = ele.getelement(driver, "cnblogs", "queryBox_id") 38 element.send_keys("python")
CnblogsTest.py
1 import time 2 import unittest 3 from selenium import webdriver 4 from GetElement import GetElement 5 6 7 class Cnblogs(unittest.TestCase): 8 9 def setUp(self): 10 self.obj = GetElement() 11 self.driver = webdriver.Firefox() 12 self.driver.get("https://www.cnblogs.com/") 13 14 def test_cnblogs(self): 15 element_query = self.obj.getelement(self.driver, "cnblogs", "queryBox_id") 16 element_query.send_keys("python") 17 element_btn = self.obj.getelement(self.driver, "cnblogs", "queryBtn_id") 18 element_btn.click() 19 time.sleep(5) 20 21 def tearDown(self): 22 self.driver.quit() 23 24 25 if __name__ == "__main__": 26 unittest.main(verbosity=2)
本实例实现了程序与数据的分离,首先从UI对象库文件WebElement.ini中取得博客园首页中需要操作的页面元素的定位方式和定位表达式,然后在GetElement.py中取得该页面元素的实例对象,最后返回给测试用例方法中进行后续处理,这样做的好处是即使不懂得测试的人员也可以配置用例,当定位表达式改变时,只修改配置文件中的定位即可,无需修改测试相关代码,当然这也是相对来说的,如果页面功能操作步骤变了那么你就得修改代码操作步骤了。
参考:https://www.cnblogs.com/linuxchao/p/linuxchao-selenium-programDataSeparate.html