pytest插件,让您可以使用Selenium驱动浏览器
项目描述
pytest-play插件,在底层使用Selenium/Splinter驱动浏览器。与Selenium网格兼容,并具有隐式自动等待动作,以减少痛点并提高鲁棒性。
更多信息及示例请访问
pytest-play,文档
cookiecutter-qa,如果您想开始修改,请查看带有实际示例的pytest-play
基于浏览器的命令
此处列出基于浏览器的命令。默认情况下,play_selenium支持浏览器交互。例如,它可以用于运行selenium splinter场景,为您的UI测试或系统测试驱动浏览器。
如果您在无法使用页面对象方法(被认为是最佳实践)的情况下,play_selenium也是您的朋友。例如
有限的时间,和/或
缺乏编程技能
相反,如果您对页面对象模式感兴趣,请查看pypom_form或pypom。
play_selenium 支持自动等待,这有助于在继续之前提高测试的可靠性。默认情况下,它等待节点可用性和可见性,但它还支持一些等待命令,以及等待给定的 JavaScript 表达式变为可接受。因此,它既用户友好又灵活。
条件命令(JavaScript)
基于浏览器级别的表达式(JavaScript)
- type: clickElement provider: selenium locator: type: css value: body condition: "'$foo' === 'bar'"
支持的定位器
支持的选择器类型
css
xpath
tag
name
text
id
value
打开一个页面
使用参数化
- type: get provider: selenium url: "$base_url"
或使用常规 URL
- type: get provider: selenium url: https://google.com
暂停
此命令将调用一个 JavaScript 表达式,该表达式将暂停您的命令的执行流程
- type: pause provider: selenium waitTime: 1500
如果您需要对非 UI 测试进行暂停/睡眠,可以使用 play_python 插件提供的 sleep 命令。
点击一个元素
- type: clickElement provider: selenium locator: type: css value: body
填写文本
- type: setElementText provider: selenium locator: type: css value: input.title text: text value
与选择输入元素交互
按标签选择
- type: select provider: selenium locator: type: css value: select.city text: Turin
或按值选择
- type: select provider: selenium locator: type: css value: select.city value: '1'
评估 JavaScript 表达式
- type: eval provider: selenium script: alert('Hello world!')
从 JavaScript 表达式创建变量
JavaScript 表达式的值将存储在 play.variables 下,名称为 count
- type: storeEval provider: selenium variable: count script: document.getElementById('count')[0].textContent
断言 JavaScript 表达式匹配
如果表达式的结果不匹配,将引发 AssertionError 并使测试失败
- type: verifyEval provider: selenium value: '3' script: document.getElementById('count')[0].textContent
验证一个元素的文本是否包含一个字符串
如果元素文本不包含提供的文本,将引发 AssertionError 并使测试失败
- type: verifyText provider: selenium locator: type: css value: ".my-item" text: a text
向一个元素发送按键
支持所有 selenium.webdriver.common.keys.Keys
- type: sendKeysToElement provider: selenium locator: type: css value: ".confirm" text: ENTER
支持按键
KEYS = [ 'ADD', 'ALT', 'ARROW_DOWN', 'ARROW_LEFT', 'ARROW_RIGHT', 'ARROW_UP', 'BACKSPACE', 'BACK_SPACE', 'CANCEL', 'CLEAR', 'COMMAND', 'CONTROL', 'DECIMAL', 'DELETE', 'DIVIDE', 'DOWN', 'END', 'ENTER', 'EQUALS', 'ESCAPE', 'F1', 'F10', 'F11', 'F12', 'F2', 'F3', 'F4', 'F5', 'F6', 'F7', 'F8', 'F9', 'HELP', 'HOME', 'INSERT', 'LEFT', 'LEFT_ALT', 'LEFT_CONTROL', 'LEFT_SHIFT', 'META', 'MULTIPLY', 'NULL', 'NUMPAD0', 'NUMPAD1', 'NUMPAD2', 'NUMPAD3', 'NUMPAD4', 'NUMPAD5', 'NUMPAD6', 'NUMPAD7', 'NUMPAD8', 'NUMPAD9', 'PAGE_DOWN', 'PAGE_UP', 'PAUSE', 'RETURN', 'RIGHT', 'SEMICOLON', 'SEPARATOR', 'SHIFT', 'SPACE', 'SUBTRACT', 'TAB', 'UP', ]
等待 JavaScript 表达式匹配
等待给定的表达式匹配或如果花费时间过长则引发 selenium.common.exceptions.TimeoutException
在编写本文时,存在一个全局超时时间(20 秒),但在未来的版本中,您将能够根据命令覆盖它
- type: waitUntilCondition provider: selenium script: document.body.getAttribute('class') === 'ready'
等待 DOM 中的元素出现
出现
- type: waitForElementPresent provider: selenium locator: type: css value: body
或不存在
- type: waitForElementPresent provider: selenium locator: type: css value: body negated: true
等待元素可见
可见
- type: waitForElementVisible provider: selenium locator: type: css value: body
或不可见
- type: waitForElementVisible provider: selenium locator: type: css value: body negated: true
断言元素存在于 DOM 中
如果断言失败,将引发 AssertionError。
出现
- type: assertElementPresent provider: selenium locator: type: css value: div.elem
或不存在
- type: assertElementPresent provider: selenium locator: type: css value: div.elem negated: true
断言元素可见
如果断言失败,将引发 AssertionError。
出现
- type: assertElementVisible provider: selenium locator: type: css value: div.elem
或不存在
- type: assertElementVisible provider: selenium locator: type: css value: div.elem negated: true
play_selenium 的推文在这里发生
变更日志
0.0.3 (2019-06-26)
根据新的 pytest-play 版本(>= 2.0),应使用 self.engine.parametrize 而不是访问 self.engine.parametrizer
0.0.2 (2019-02-18)
移除 pytest 版本限制(添加对 pytest>=4 的兼容性)
0.0.1 (2019-01-25)
支持新的 pytest-play >= 2.0 的基于 YAML 的语法(不再支持 json)