pytest插件,允许您使用selenium驱动浏览器

play-selenium的Python项目详细描述


See Build Status on Travis CIDocumentation Statushttps://codecov.io/gh/davidemoro/play_selenium/branch/master/graph/badge.svg

pytest-play插件在引擎盖下使用selenium/splinter驱动浏览器。 Selenium网格兼容和隐式自动等待操作,用于更健壮、更少痛苦的场景。

更多信息和示例:

基于浏览器的命令

这里是基于浏览器的命令。 play_selenium默认情况下支持浏览器交互。例如,它可以用于运行selenium splinter场景,驱动浏览器进行ui测试或系统测试。

play_selenium在页面对象方法(被认为是最佳实践)不可行时也是您的朋友。例如:

  • 有限时间,和/或
  • 缺乏编程技能

相反,如果您对页面对象模式感兴趣,可以查看pypom_formpypom

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

推特

play_seleniumtweets发生在这里:

变更日志

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)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
通过signingReport运行安卓应用程序时发生java错误   java我需要实现hashCode()和equals()方法吗?   javascript Selenium Java从Pinterest下载图像   java Tomcat(嵌入式),无需重新启动即可进行更改   java检查每个if是否有匹配的endif   的java接口。我也是。罐子   mysql java。sql。SQLException:列索引超出范围,0<1。使用准备好的语句   如何在java中修改json字符串?   javascript智能手机的独特功能   web服务java。lang.NoSuchMethodError:javax。ws。rs.core。响应$Status$Family   sockets通过浏览器/URL与ServerSocket建立Java连接   JavaSpring数据自定义存储库和接口隔离原则   swing从不同的java类访问jdialog的一个实例   java如何根据发出的事件有条件地缓冲分组的可观察/流量?   用java将电子邮件正文导出为html文件   JavaSpring获取ServletContext并将其作为Bean提供   setter不做java中应该做的事情