使用 Selenium 的设施
项目描述
版本 |
下载 |
测试 |
覆盖范围 |
---|---|---|---|
PyBrowserTest
PyBrowserTest 是一个(非常)小的框架,用于创建浏览器测试。
它包装了所有的 selenium 初始化,以便更容易地开始这些类型的测试。它非常灵活,可以与您最喜欢的跑步者一起使用。
PyBrowserTest 为每个测试打开一个干净的环境。它很慢,但很安全。
它需要 python-selenium 才能正常工作,因为它只是它的包装器。
安装
只是:
pip install pybrowsertest
一个例子
让我们从一个完整的例子开始:
import unittest
from pybrowsertest import BrowserTestCase
class AutomationTest(BrowserTestCase):
def test_the_title_is_set(self):
page = self.browser.open('/')
self.assertEquals("Directory listing for /", page.title)
这个小代码打开一个浏览器,在'/'处定位页面并检查标题是否是给定的。
请注意,测试类继承自BrowserTestCase
,以及它如何具有公共属性以获取 selenium 驱动程序实例。它使用此驱动程序来加载页面并进行检查。
特征
是什么让这个小框架如此特别?
如果您的一项测试失败,它将从最后一个屏幕截取屏幕截图作为调试的附加数据。
您可以为任何元素的出现设置超时。
它不会覆盖方法
setUp
或tearDown
,因此对于您当前的测试是安全的。它为每个测试使用一个新的浏览器实例。这很慢,但却是确保您拥有一个干净的环境(没有 cookie、会话或其他任何东西)的更安全的方法。
它从文件中读取配置,允许您修改文件并使用另一个浏览器再次运行测试。您可以更改配置文件,甚至可以从测试中设置配置。
它提供了一些有用的装饰器来避免在某些浏览器中进行测试。
你可以使用你最喜欢的跑步者:unittest.main,nosetests,zope.testrunner,pytong),……甚至你自己的跑步者(就像我必须做的那样来测试它)
装饰器
并非所有浏览器都以相同的方式工作,因此会有一些测试无法在其中一些中执行。正因为如此,这个框架提供了一些装饰器来让开发者的生活更轻松:
onlyIfBrowserIn
此装饰器将允许您仅排除某些浏览器的测试。
例子:
@onlyIfBrowserIn('chrome', 'firefox')
def test_example(self):
pass
onlyIfBrowserNotIn
相反onlyIfBrowserIn
,只有在您使用这些浏览器时才会执行测试。
@onlyIfBrowserNotIn('chrome', 'firefox')
def test_example(self):
pass
配置
PyBrowserTest 是高度可配置的。您可以使用三个文件来配置它。从最低优先级到最高优先级:
/etc/pybrowsertest.cfg
.pybrowsertest.cfg
pybrowsertest.cfg
文件将具有典型的 INI 文件格式,带有部分和关键字。
请检查文件browsertest.cfg.template以获取更多信息。
也许您对将自己的配置文件用于一个测试文件不感兴趣。您可以通过设置变量来做到这一点:
from pybrowsertest import BrowserConfiguration
BrowserConfiguration.default_configuration_files = ['whatever']
您可以在测试中手动覆盖每个变量:
from pybrowsertest import BrowserConfiguration
BrowserConfiguration.default_selenium_url = 'http://localhost:6666/wd/hub'
BrowserConfiguration.default_selenium_mode = 'firefox'
API
对象已尽可能简单和预期。因此,您可以通过调用属性直接从测试中访问浏览器browser
。在这里你会发现一些非常有用的方法:
browser
open(url)
: 将加载一个新页面。它将返回一个“页面”对象。close()
: 将结束会话并关闭浏览器。不要使用它。每次测试后都会自动调用。refresh()
: 将刷新当前页面。back()
:如果可能,转到历史记录的上一页。forward()
:如果可能,转到历史的下一页。add_cookie(key,value)
: 添加一个 cookie,其key
和value
.get_cookie(key)
: 通过它来检索一个 cookiekey
。delete_cookie(key)
: 删除一个 cookie,给它key
.delete_all_cookies()
: 清除所有cookies。
page
get_screenshot_as_file(filename)
:在文件中存储 PNG 屏幕截图filename
。find_element(id)
: 检索 id 为“id
”的元素。应该只有一个。find_element_by_css_selector(selector)
: 检索第一个匹配的元素selector
。find_elements_by_css_selector(selector)
: 检索所有匹配的元素selector
。find_element_by_xpath(selector)
: 检索第一个匹配的元素selector
。find_elements_by_xpath(selector)
: 检索所有匹配的元素selector
。find_element_by_tag_name(name)
:检索带有标签的第一个元素name
。find_elements_by_tag_name(name)
:检索所有带有标签的元素name
。find_element_by_class_name(name)
:检索具有类的第一个元素name
。find_elements_by_class_name(name)
:检索所有具有类的元素name
。
为了提高性能,所有find_*
方法都将返回一个生成器。并且它们都有一个可选参数timeout
,该参数将等待一段时间让元素出现。
widgets
有一个通用的 Widget 类型,但对于某些类型,最常用的属性可以作为对象属性检索,最常用的操作是对象方法。
除了所有这些方法之外,它们都将具有这些方法find_*
:
click()
:模拟鼠标点击小部件。get_attribute(name)
:检索属性名称的值。is_displayed()
:如果显示小部件,则为真。is_enabled()
:如果小部件已启用,则为真。
和属性:
id
: 小部件标识符text
: 小部件内的文本size
: 像{'width': 30, 'height': 30}的字典,带有小部件大小。location
: 对象的位置。tag_name
:小部件标签。
A
小部件
该小部件A
将具有一些额外的属性:
href
: 目标网址target
: 网址行为。
Input
小部件
小部件“输入”将有一些额外的方法:
clear()
: 删除任何值is_selected()
:如果类型是'checkbox'或'radio'并且它被选中,则为真。send_keys(keys)
: 将一个接一个地键入键。
和属性:
type
: 输入类型value
: 当前值placeholder
: 没有值时显示的文本。
TextArea
小部件
小部件“textarea”将有一些额外的方法:
clear()
: 删除任何值send_keys(keys)
: 将一个接一个地键入键。
和属性:
rows
: 行数value
: 当前值placeholder
: 没有值时显示的文本。
Form
小部件
小部件“表单”将有一些额外的方法:
submit()
: 发送表格。
和属性:
method
: 通常是 POST 或 GET。action
:目标网址。
贡献
如果你想贡献,你应该知道如何运行测试。这些是克隆存储库后的步骤:
# You will need a Server running. You can use your own... or this: make tests_server # webdriver is required too: make selenium_server_start # This command will download all what you need for you: make tests
注意:该命令将让您停止 selenium 服务器和本地服务器。
如果您想看到更干净的窗口,只需在不同的窗口中启动 selenium 服务器和本地服务器,或者将其输出重定向到/dev/null。
我们自己的跑步者
为了测试这个框架,有必要构建我们自己的运行器。有必要捕获跳过的测试,以检查它们是否真的被跳过;捕捉失败的测试,检查它们是否真的失败了,等等。所以你需要运行./run_tests.py脚本来测试自己的 pybrowsertest 库。
请记住:./run_tests.py脚本对您自己的测试没有用处;只在这个图书馆。
项目详情
pybrowsertest -0.0.5.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b755fdbb5cf849505db07046fdf0b0b9668152e8e0c7a7c70f9fe79fef887599 |
|
MD5 | 820d3db69e7f4b7e5ee49d849de55a85 |
|
布莱克2-256 | 1e11fd8d7382eaae2ee744eec741ea08941679ba5aac14ddd9a162d7e6e2febb |