pytest插件,允许您使用selenium驱动浏览器
play-selenium的Python项目详细描述
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语言
- 标签
- 姓名
- 文本
- id
- 价值
打开一页
参数化:
- type: get provider: selenium url: "$base_url"
或使用常规URL:
- type: get provider: selenium url: https://google.com
暂停
这个命令调用一个javascript表达式 暂停命令的执行流:
- type: pause provider: selenium waitTime: 1500
如果需要暂停/睡眠进行非ui测试,可以使用 sleep命令由play_python插件提供。
单击元素
- 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表达式匹配
如果表达式的结果与^{tt8}不匹配$ 将被提升,测试将失败:
- 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.TimeoutExceptionif花费的时间太长。
在编写本文时,有一个全局超时(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
assert元素可见
如果断言失败,将引发AssertionError。
现在:
- type: assertElementVisible provider: selenium locator: type: css value: div.elem
或不存在:
- type: assertElementVisible provider: selenium locator: type: css value: div.elem negated: true
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)