WEB自动化测试高级篇框架封装高级实战

层级结构大概如图:

 

 

1、浏览器的初始化和关闭

  创建conftest文件,如下,用pytest的装饰器,创建方法,定义driver

 2、创建keyword目录,创建keyword文件,封装一些操作的方法,如打开浏览器、元素定位+显示等待、键盘操作、鼠标操作、frame切换等方法

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红色
        )
View Code

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

 

posted @ 2023-08-10 01:13  琉璃星眸  阅读(49)  评论(0编辑  收藏  举报