跳转到主要内容

适用于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_enctypeapplication/x-www-form-urlencodedmultipart/form-data)设置为有效负载。可以在URL中提供身份验证(通过 user:password@localhost)。由于主机部分实际上没有任何意义,您可以直接指定路径作为URL。它返回应用程序返回的HTTP状态码。form 的替代方案是 datadata_type 参数。参数 data 是请求的预编码体,而 data_type 是体的内容类型。这些参数对于 http PUT 非常有用。

reload()

重新加载当前打开的URL(发送任何提交数据)。

login(username, password=_marker)

在请求中设置一个基本身份验证头,使用给定的 usernamepassword 进行身份验证。如果未提供 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)

通过其 nameid 属性(至少需要其中一个)返回一个选定的表单。

以下属性也很有帮助:

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

访问浏览器选项。

浏览器Cookies

您可以使用浏览器上可用的类似于字典的对象 cookies 访问当前设置的cookie。

>>> browser.cookies['mycookie']
mycookie=myvalue

除了默认的字典方法之外,此对象还有以下方法:

add(name, value)

添加一个名为 name 的新cookie,其值为 value

clear

清除所有设置的cookie。

浏览器选项

以下选项是 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的重定向。启用它,将更新选项 serverport 为重定向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')

表单

表单有以下方法和属性

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-fieldsform-actions,它们是form公开的动作和字段的别名。

  • 改进表达式API。

2.0 (2012/09/24)

  • 为标准浏览器添加了选项follow_external_redirect,允许您重定向到不同的域,但该域仍由WSGI应用程序处理(这修改了浏览器选项以适应新域)。

  • 为标准浏览器添加了对自动JSON反序列化的支持,在json属性中。

  • 优化表达式:添加一个类型 form 来从表达式的结果创建表单,添加一个标志 unique 使表达式只能返回一个值,或者在表达式不匹配时返回 None。

  • 通过为标准浏览器的方法 open 提供参数 datadata_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 (47.9 kB 查看哈希)

上传时间

由以下组织支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面