# zzqa **Repository Path**: nemo1122/zzqa ## Basic Information - **Project Name**: zzqa - **Description**: No description available - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-11-19 - **Last Updated**: 2021-10-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## itest **开发中....** ## uitest 介绍 对 selenium 的简单封装,只为更方便编写脚本,不用过度关注定位。 - UITest:对 selenium WebDriver 的封装 - UIElement:对 selenium WebElement 的封装 ### 综述 uitest 基于 selenium 实现页面操作,通过 pytest 实现用例的运行。 pytest 相关的配置放置于 uitest/config.py 和 uitest/pytest.ini。 | 可配置内容 | 配置项位置 | | --- | --- | | 测试报告标题 | `pytest_html_report_title()` | 关于一些全局配置放置于 uitest/config.py。 | 可配置内容 | 配置项 | 说明 | | --- | --- | --- | | 查找或操作超时设置 | timeout | 如设为4,表示如果查找元素时未找到,在4s内会不断重试 | | 是否debug模式 | debug | 目前debug模式只针对元素高亮时间变长,让你能知道操作的元素是哪个 | | 浏览器 | browser | 设置使用不同的浏览器运行,可选择 chrome,或者无头模式 chrome_headless,具体可查看zzdriver.driver.open_browser() | | 元素标记颜色 | color | 设置执行过程中标记元素的颜色 | ### uitest #### 全局操作 针对浏览器层面的操作,比如打开 url,打开关闭浏览器窗口等。 | 操作 | 方法名 | 说明 | | --- | --- | --- | | 打开网址 | open | 打开指定的网址 | | 等待 | wait | 强行等待多少s,ui.wait(3) | | 元素标记颜色 | color | 设置执行过程中标记元素的颜色 | | 打开新窗口 | open_new_window | 打开新窗口并跳转到打开的窗口 | | 切换到下一个窗口 | next_window | 是根据窗口打开顺序,非肉眼可见| | 切换到上一个窗口 | pre_window | | | 关闭当前窗口 | close_and_switch | 关闭当前窗口并切换到上一个窗口 | | 最大化窗口 | max | 最大化窗口 | | 刷新窗口 | refresh | 刷新页面,等同于浏览器的 F5 | | 执行js代码| exec_js | | | 滚动窗口 | scroll | 指定宽度和高度,滚动页面到指定位置| | 截图 | screenshots | 需要指定保存的文件路径 | | 添加cookie |add_cookie|常用于通过cookie绕过登录, add_cookie('user', 'nemo')| | 批量添加cookie |add_cookie|添加多行| | 关闭当前窗口 | close| | | 关闭浏览器 | quit | | #### 定位 | 针对元素 | 方法名 | 说明 | | --- | --- | --- | | 所有元素 | find_all | 查找并返回所有找到的元素,自动判断定位方式,也可以手动输入 | | 指定的元素 | find | 如果找到的不是唯一,可输入其所在的顺序 | | 通过label查找input | find_input_by_label | 表单中很常见,input没有方便的标识,可使用input前面的label | | 通过占位符查找input | find_input_by_placeholder | 表单中常见,当input没有方便定位标识时,可使用其占位符 | | 通过label查找select | find_select_by_label | 通过label找下拉菜单 | | 通过页面显示文本查找 | contains | 比如按钮、链接,通过其显示文本查找 | | 鼠标悬停 | hover | 鼠标指向某元素,不进行点击,也就是 move to | 可根据当前系统的特点,继续增加封装的内容,提高脚本编写效率。 ### UIElement #### 元素操作 主要封装的元素操作 | 操作 | 方法名 | 说明 | | --- | --- | --- | | 输入 |type| 在输入框输入内容| | 点击 |click|点击指定的元素| | 双击 |double_click|双击指定元素| | 鼠标悬停 | move_to_element | 鼠标移动到指定元素,用于一些鼠标悬停隐藏展示的页面效果元素 | | 下拉菜单选择 |select|选择下拉选项,可以使用数字(序号,1开始),文本(会先使用可见文本,不行则使用value)| | 滚动元素至可见|scroll_into_view|将当前元素滚动到可见位置| #### 获取元素内容 | 操作 | 方法名 | 说明 | | --- | --- | --- | | 获取文本 |text| 获取当前元素的文本,一般为后续操作、断言使用| | 属性 |attribute| 获取当前元素的某个属性值| #### 断言 这里设定了一些断言动作,以方便用例中的断言。 | 方法名 | 说明 | | --- | --- | | is_contains|返回当前元素是否包含指定文本| | should_contains|断言,判断当前元素是否包含指定文本| | should_contains_attr|返回当前元素属性是否包含指定文本| | attr_should_contains|断言,判断当前元素指定的属性是否包含文本| ## pytest 插件介绍 ### 测试报告 pytest-html 用于生成测试报告,使用方式: ``` pytest --html=reportname.html ``` ### 多重断言 pytest-assume 正常情况下如果你写了多个断言,第一个断言失败后会报错,后面的断言不会执行,要确保所有断言都执行则可以使用此插件。 使用方式: ```python def test_add2(self): pytest.assume(add(1,2)==3) pytest.assume(add(1,4)==3) pytest.assume(add(2,2)==4) ``` ### 设定执行顺序 pytest-ordering 对于一些上下文依赖的,有时候可能需要设定一些特定执行顺序,pytest的ordering插件,就很好的解决了这个问题 使用方式: ```python import pytest @pytest.mark.run(order=2) def test_order1(): print ("first test") assert True @pytest.mark.run(order=1) def test_order2(): print ("second test") assert True ``` ### 失败重跑 pytest-rerunfailures 接口测试和自动化测试,很多时候由于网络原因造成用例失败,为规避这种情况可以让用例失败重跑以规避这种情况 使用方式: ``` pytest -sq demo_rerun.py --reruns 5 # 直接重跑 pytest -sq demo_rerun.py --reruns 5 --reruns-delay 1 # 每次重跑会间隔1s ``` ### 多CPU并行运行用例 pytest-xdist pytest-xdist 允许你通过 -n 标志并行运行多个测试,以提高用例运行效率。 ``` pytest -n 2 # 并行2个 pytest -n auto # 自动根据机器上的CPU分配并发数量 ``` ### pytest-sugar pytest-sugar改变了pytest的默认外观,增加了一个进度条,并立即显示失败的测试。 它不需要配置,只需点击安装pytest-sugar,用pytest运行你的测试,可获得更漂亮,更有用的输出。