WEB自动化测试高级篇框架封装高级实战
层级结构大概如图:
1、浏览器的初始化和关闭
创建conftest文件,如下,用pytest的装饰器,创建方法,定义driver
2、创建keyword目录,创建keyword文件,封装一些操作的方法,如打开浏览器、元素定位+显示等待、键盘操作、鼠标操作、frame切换等方法
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
from selenium.webdriver import ActionChains from selenium.webdriver.support import expected_conditions as ec from selenium.webdriver.support.wait import WebDriverWait # 工具类 class WebKeys: # 构造方法,用于接受driver对象 def __init__(self, driver): self.driver = driver self.wait = WebDriverWait(self.driver, 5) # 打开浏览器 def open(self, url): self.driver.get(url) self.wait.until(ec.url_contains(url)) # 元素定位 def locator(self, name, value): el = self.driver.find_element(name, value) # 将元素的所在框标记出来 self.locator_station(el) return el # 定位+显示等待 def locator_with_wait(self, name, value): """元素的定位+显示等待""" locator = (name, value) self.wait.until(ec.visibility_of_element_located(locator)) el = self.driver.find_element(name, value) # 将元素的所在框标记出来 self.locator_station(el) return el # 窗口切换 def change_window(self, n): """窗口切换的功能""" # 获取句柄 handles = self.driver.window_handles # 切换到原始的页面, n = 0 # 切换到第二个页面, n = 1 依次类推 # 切换到最新的页面, n = -1 self.driver.switch_to.window(handles[n]) print("当前跳转成功的页面:", self.driver.title) # 元素文本获取 + 显示等待 def text_wait(self, name, value, text): el = (name, value) res = self.wait.until(ec.text_to_be_present_in_element(el, text)) return res # 对获取到的元素进行判断 # 获取到的元素的文本信息进行判断 # 鼠标事件 def mouse_hold(self): """鼠标事件的操作""" action = ActionChains(self.driver) action.click().click_and_hold().scroll_to_element().perform() # 键盘事件 # 滚轮事件 # 显示定位的地方,方便确认定位位置 def locator_station(self, ele): self.driver.execute_script( "arguments[0].setAttribute('style',arguments[1]);", ele, "border: 2px solid red" # 边框,red红色 )
3、测试数据分离:如账号之类的
创建一个VAR目录,底下创建一个文件,
4、网页、元素分离
创建目录,存放元素,如locate,下面创建文件,存放元素的寻找方法
5、创建业务模块目录
这里创建一个目录,如logic,下面创建登录的文件login.py
loginpage继承webkeys类,类下面创建login方法,传入url,username,passwd
6、如果是使用yaml作为测试数据的存放,创建data目录,下面创建yaml文件,放入测试数据
7、yaml数据驱动
创建data目录,下面创建yaml_driver文件,定义读取yaml的方法,传入path, 定义file,data,return 读取后的data数据
8、定义yaml文件读取路径
创建yamlReaderTest.py, 定义文件的路径
9、创建testcase目录,下面创建了测试用例文件testcase文件。
用pytest.mark.parametrize,引入data,带入load_yaml路径(load_yaml路径return的是data,列表,列表中是字典),这里是分多次执行,每次传给test_case02的data是字典
定义方法,传入browser,data
用login实例化浏览器对象,传入browser参数,得到driver,因为loginpage是继承的webkeys类,webkeys的构造方法需要driver,
然后调用loginpage的login方法,传入参数url,username,passwd(这里用的是data的)
10、创建运行文件,main.run.py