适用于WSGI应用的合理功能测试浏览器
项目描述
infrae.testbrowser 是与 zope.testbrowser 具有相同理念的 WSGI 应用程序测试浏览器。它仅依赖于 lxml 和 zope.interface。
此包中还提供了相同浏览器的 Selenium 版本。它与默认版本具有相同的 API,并需要 Selenium 2 才能工作。
API
浏览器
- infrae.testbrowser.browser.Browser
测试浏览器。您可以通过将待测试的 WSGI 应用程序作为构造函数的参数来实例化一个新的对象。该应用程序将通过 localhost 可用。
示例
>>> browser = Browser(MyWSGIApplication)
在浏览器上,您有以下方法
- open(url, method='GET', query=None, form=None, form_enctype='application/x-www-form-urlencoded', data=None, data_type=None)
打开指定的 url,使用指定的 method。如果提供了查询参数,它将被编码在URL中。如果提供了表单,它将根据 form_enctype (application/x-www-form-urlencoded 或 multipart/form-data)设置为有效负载。可以在URL中提供身份验证(通过 user:password@localhost)。由于主机部分实际上没有任何意义,您可以直接指定路径作为URL。它返回应用程序返回的HTTP状态码。form 的替代方案是 data 和 data_type 参数。参数 data 是请求的预编码体,而 data_type 是体的内容类型。这些参数对于 http PUT 非常有用。
- reload()
重新加载当前打开的URL(发送任何提交数据)。
- login(username, password=_marker)
在请求中设置一个基本身份验证头,使用给定的 username 和 password 进行身份验证。如果未提供 password,则使用 username 作为密码。
- set_request_header(key, value)
在查询应用程序时添加一个名为 key 的头,其值为 value。头设置为后续的所有查询。
- get_request_header(key)
获取查询应用程序时使用的头的值。如果没有匹配的头,则返回 None。
- clear_request_headers()
移除查询应用程序时使用的所有设置的头。包括身份验证头。
- get_link(content)
通过内容返回一个选定的链接。
- get_form(name=None, id=None)
通过其 name 或 id 属性(至少需要其中一个)返回一个选定的表单。
以下属性也很有帮助:
- url
当前查看的URL,不包括主机部分,但包括查询数据等。
- location
当前查看的路径。**建议**在测试中使用此属性,而不是 url。在 Selenium 测试中,URL 会根据您的本地测试设置而变化,这意味着如果您的 Selenium 不在测试套件所在的同一台计算机上,URL 不会是 localhost。
- history
之前查看的最后几个URL。
- method
查看当前页面所使用的方法。
- status
当前查看页面的HTTP状态。
- status_code
当前查看页面的HTTP状态码作为整数。
- content_type
当前查看页面的内容类型。
- headers
类似于字典的访问权限,用于访问响应头。
- cookies
类似于字典的对象,用于访问现有的cookie。
- contents
当前查看页面的有效负载。
- html
如果响应是HTML文档,这包含文档的LXML解析树。
- xml
如果响应是XML响应,这包含其的LXML解析树。
- json
如果响应是JSON响应,这包含加载的JSON对象。
- options
访问浏览器选项。
浏览器选项
以下选项是 options 对象的属性,例如:
>>> browser.options.handle_errors = False
- server
用于查询WSGI应用程序的服务器名称(默认为 localhost)。
- port
用于查询WSGI应用程序的端口号(默认为 80)。
- protocol
用于查询WSGI应用程序的HTTP协议(默认为 HTTP/1.0)。
- follow_redirect
布尔值,指示是否必须自动跟随重定向。默认为 True。
- follow_external_redirect
布尔值,指示是否自动跟随并处理由选项中设置的服务器和端口不匹配的URL的重定向。启用它,将更新选项 server 和 port 为重定向URL中定义的新值。默认为False。
- handle_errors
在WSGI环境中设置WSGI标志 wsgi.handleErrors。默认为True。
- cookie_support
布尔值,指示是否必须支持cookie。默认为 True。
- default_wsgi_environ
可以用来在WSGI环境中注入变量的字典。
检查
浏览器有一个 inspect 属性。您可以用它注册一个Xpath表达式,然后在HTML页面查询它们。
>>> browser.inspect.add('feedback', '//div[@class="feedback"]/span') >>> self.assertEqual(browser.inspect.feedback, ['Everything ok']) >>> browser.inspect.add('feedback', css='div.feedback span') >>> self.assertEqual(browser.inspect.feedback, ['Everything ok'])
- add(name, xpath=None, type='link', css=None, unique=False)
添加一个名为 name 的表达式,可以用来使用 xpath 表达式(或 css 表达式)检查浏览器中的HTML内容。type 可以是
- text
结果将是一个包含每个匹配元素文本的列表。
- normalized-text
结果将是一个包含每个匹配元素已规范化的文本的列表。 (在Selenium上不可用,文本已默认由浏览器规范化)。
- link
结果将是一个包含链接的列表。
- form
结果将是一个包含表单的列表。
- form-actions
结果将是表单的动作。
- form-fields
结果将是表单的字段。
- clickable
仅在selenium上可用,它是一个包含您可以点击的元素(即使它们不是链接)的列表。
如果 unique 为true,则期望最多只有一个匹配项。如果有多项匹配,将断言错误,如果没有匹配项,则返回 None。
宏
宏允许您添加要在浏览器上执行的操作列表。一个例子就会说话
>>> def create_content(browser, identifier, title): ... form = browser.get_form('addform') ... form.get_control('identifier').value = identifier ... form.get_control('title').value = title ... assert form.inspect.actions['save'].click() == 200 >>> browser.macros.add('create', create_content)
现在您可以使用浏览器创建内容
>>> browser.macros.create('test', 'Test Content') >>> browser.macros.create('othertest', 'Other Test Content')
链接
链接有一些有用的属性和方法
- click()
在浏览器中跟随此链接,并返回应用程序返回的HTTP状态码。
- url
链接的目标URL。
- text
链接的文本。
作为检查的结果,链接非常有用
>>> browser.inspect.add('tabs', '//div[@class="tabs"]/a', type="link") >>> self.assertEqual(browser.inspect.tabs, ['View', 'Edit']) >>> self.assertEqual(browser.inspect.tabs['view'].click(), 200)
表单
表单有以下方法和属性
- name
表单的名称。
- action
表单提交的URL。
- method
用于提交表单的方法。
- enctype
用于提交表单的表单enctype。
- accept_charset
在提交之前将表单数据编码到的字符集。
- controls
包含表单中所有控件的字典。
- inspect
检查属性,类似于浏览器的属性。默认情况下,inspect.actions 被注册为返回表单中所有提交类控件。
- get_control(name)
通过名称返回给定的表单控件。
- submit(name=None, value=None)
提交表单,可能添加控件名称和给定值到提交中。这返回应用程序返回的HTTP状态码。
调用 str(form) 只会返回表单的HTML代码。
表单支持所有已知的HTTP控件。
表单控件
为了保持一致,所有表单控件都具有以下属性
- name
控件名称。
- type
控件类型,如输入的类型属性或其他情况下的标签名称。
- value
控件中存储的值。
- multiple
布尔值,指示控件是否存储多个值。
- options
如果值必须从可能值列表中选择,则这些是可能性。
- checkable
布尔值,表示控件是否可被选中(即是否为复选框)。
- 选中
布尔值,表示控件是否被选中(因此,如果控件可被选中,则值将被发送)。
此外,动作控件(如提交按钮、按钮)有
- submit()
使用此动作提交表单。这返回应用程序返回的HTTP状态码。
- click()
submit()的别名。
对于文件控件,您必须将值设置为要上传的文件名(即路径到文件)。
Selenium浏览器
- infrae.testbrowser.browser.selenium.Browser
测试浏览器。您通过将待测试的WSGI应用程序作为构造函数的参数来实例化一个新对象。
您必须将浏览器用作上下文管理器,以便启动和停止Selenium将用于访问应用程序的服务器。
以下环境变量可用于控制与Selenium服务器的连接
TESTBROWSER_BROWSER(默认为firefox)
TESTBROWSER_SELENIUM_PLATFORM(默认为本地)
TESTBROWSER_SELENIUM_HOST(默认为localhost)
TESTBROWSER_SELENIUM_PORT(默认为4444)
TESTBROWSER_SERVER(默认为localhost)
TESTBROWSER_PORT(默认为8000)
如果您将测试套件设置为连接到不在运行测试套件的计算机上的Selenium服务器,请设置服务器和端口选项,以便Selenium知道如何连接到您的应用程序(它应该是您的计算机的网络名称)。
API与默认浏览器相同,但有以下区别
您无法访问HTTP状态或头信息,
您无法更改隐藏字段(您只能做用户能做的事情)。
然而,Cookie仍然有效。
Selenium浏览器选项
以下选项是选项对象的属性,例如
>>> browser.options.enable_javascript = False
它们与可能的配置环境变量相当
- enable_javascript
启用或禁用Selenium中的JavaScript。
- browser
用于指定期望使用的浏览器的字符串,例如‘firefox’或‘chrome’等。
- selenium_host
运行Selenium服务器的计算机的网络名称。
- selenium_port
运行Selenium服务器的端口号。
- selenium_platform
Selenium应运行的操作系统(例如,如果您希望Selenium在Windows上选择浏览器,请将其设置为‘win’)。
- server
测试套件将运行的计算机的网络名称。这是Selenium将用于访问测试应用程序的名称。
- port
测试应用程序将绑定的端口,以便Selenium可以访问它。
代码仓库
您可以在Mercurial中找到此扩展的源代码:https://hg.infrae.com/infrae.testbrowser。
变更日志
2.0.2 (2013/05/23)
将cssselect作为依赖项添加,以便与lxml 3.x一起使用。
修复简单浏览器中未正确引用的PATH_INFO环境变量。
2.0.1 (2012/12/10)
添加新的表达式form-fields和form-actions,它们是form公开的动作和字段的别名。
改进表达式API。
2.0 (2012/09/24)
为标准浏览器添加了选项follow_external_redirect,允许您重定向到不同的域,但该域仍由WSGI应用程序处理(这修改了浏览器选项以适应新域)。
为标准浏览器添加了对自动JSON反序列化的支持,在json属性中。
优化表达式:添加一个类型 form 来从表达式的结果创建表单,添加一个标志 unique 使表达式只能返回一个值,或者在表达式不匹配时返回 None。
通过为标准浏览器的方法 open 提供参数 data 和 data_type 来提高对任意 HTTP 方法的支持。
改进对 cookie 的支持(支持设置和删除 cookie,以及多个 cookie)。
当端口设置为 443 时,改进默认 WSGI 环境以支持 HTTPS 变量。
改进 Selenium 浏览器支持。
2.0b1 (2011/11/07)
添加对 Selenium 2 的初始测试支持。Selenium 浏览器将 wsgi 应用程序作为参数,在测试期间使用 Python 默认 wsgi 服务器,以线程的方式提供。Selenium 浏览器的 API 与默认 API 相同,尽可能保持一致。
修复与编码相关的问题,以便在许多地方使用 Unicode 字符串。
尝试以与 HTML 文档中列出的相同顺序发送字段值。一些系统使用此功能。
对于大多数字段,允许它们具有相同的名称,即使它们的类型不同。在这种情况下,您应将列表而不是值设置为您检索的小部件。
允许自定义更多内容,如主机名、端口、协议、默认 wsgi 环境。其中一些设置可以从命令行进行自定义(与 Selenium 相同的系统)。
现在浏览器是一个上下文管理器。您可以使用 handlers 注册在上下文管理器结束时执行的一些操作。
在基本浏览器中添加对 XML 的支持。浏览器中的 xml 属性中可用 lxml 解析树。
现在只支持 Python 2.6 和 2.7。
1.1 (2010-02-07)
为检查表达式添加一个 css 选项。
在 get_form 中添加一个 id 选项,以便能够通过其 ID 选择表单。
将 normalized-text 添加为有效表达式类型到表达式:它返回匹配节点的文本,其中空白字符已被归一化。
修复未选择文件时发送文件的问题。
修复了与 button 标签的一些检测问题,该标签似乎没有被 LXML 正确处理。
1.0 (2010-10-07)
初始发布。
项目详情
infrae.testbrowser-2.0.2.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7ae165943f407cacca5c1bb64dc3b57f84edfff244f0db2a17ee1081da7977f2 |
|
MD5 | fb792a176e95b888cb3dbe72f9daca94 |
|
BLAKE2b-256 | 9126fa923b320c82e26369b10d363378949110554498c97bd6ea28b610fa9c35 |