开发者技巧
此文档以前位于 wiki 上
运行单个测试
在开发 WebDriver 时,通常希望运行单个测试而不是特定驱动程序的整个测试套件。
您可以通过这种方式运行给定测试类中的所有测试
./go test_firefox onlyRun=CombinedInputActionsTest
您还可以通过键入以下命令直接从命令行运行单个测试
./go test_firefox method=foo
不在错误或失败时停止
默认情况下,测试套件会在错误和失败时停止。您可以通过将 haltonerror
或 haltonfailure
环境变量设置为 0
来禁用此行为。
查看测试日志
当您运行测试时,测试结果不会显示在屏幕上。它们被写入 `./build/test_logs` 文件夹。会写入一对文件。它们的名字相对一致,并包含已运行测试的详细信息。这一对文件包括一个 txt 文件和一个 xml 文件。xml 文件包含有关运行时环境的更多信息,例如路径、Ant 版本等。这些文件会在下次执行相同的测试目标时被覆盖,因此如果结果对您很重要,您可能需要存档它们。
使用 Rake
Rake 与使用其他构建工具(如“make”或“ant”)非常相似。您可以通过添加一个参数来指定要运行的“目标”,并且您可以一次添加多个目标。请注意,由于 WebDriver 不依赖于 ruby 的安装并使用 JRuby,因此应该不直接涉及 rake - 请改用 _go_ 脚本。例如,为了清理构建,然后构建并运行 HtmlUnitDriver 测试
./go clean test_htmlunit
使用的默认目标将编译代码并运行所有测试。更有趣的目标是
目标 | 描述 |
---|---|
clean | 删除构建目录的内容,删除所有已编译的工件 |
test | 编译 HtmlUnitDriver、FirefoxDriver 和 InternetExplorerDriver 的依赖项,并运行它们的所有测试以及支持库的测试 |
firefox | 编译 FirefoxDriver |
htmlunit | 编译 HtmlUnitDriver |
ie | 编译 InternetExplorerDriver。这不会在非 Windows 系统上编译 C++,但无论您碰巧使用哪个操作系统,都会始终编译 Java |
support | 猜猜这是做什么的 :) |
test_htmlunit | 编译依赖项,然后运行 HtmlUnitDriver 的测试。对于此表中的所有编译目标,都可以遵循相同的“test_x”模式。 |
使用 Java 测试运行远程调试器
您可以在调试模式下运行测试,并等待远程 java 侦听器(可以在 eclipse 或 intellij 中设置)。
./go debug=true suspend=true test_firefox
调试 Firefox 驱动
从 Firefox 进程本身获取输出
这通常对于调试 Firefox 启动问题很有用。Java 系统属性 webdriver.firefox.logfile
将指示 FirefoxDriver 将输出重定向到一个文件
java -Dwebdriver.firefox.logfile=/dev/stdout -cp selenium-2.jar <sometest>
输出到错误控制台
用于调试 Firefox 驱动程序扩展的常用技术是调试语句。以下两种方法可以从扩展内的几乎任何 Javascript 代码中使用
Logger.dumpn()
- 将字符串记录到控制台(并将参数转换为字符串)。例如:Logger.dumpn("找到元素:" + 节点)
。Logger.dump()
- 获取单个参数(一个对象),并转储其所有内容:已实现的接口、数据字段、方法等。
将错误控制台的输出获取到文件
要查看使用 Logger
实用程序生成的输出,必须打开 Firefox 的错误控制台 - 在远程机器上很难或根本不可能。幸运的是,有一种方法可以将输出的内容转储到一个文件中
FirefoxProfile p = new FirefoxProfile();
p.setPreference("webdriver.log.file", "/tmp/firefox_console");
WebDriver driver = new FirefoxDriver(p);
...
webdriver.log.file
首选项将指示 Logger
将控制台的所有内容转储到指定的文件中。webdriver.log.file
将更多输出获取到命令行
当怀疑来自 Firefox 的额外日志记录可能有益时,可以将调试级别一直调高
export NSPR_LOG_MODULES=all:3
设置此环境变量将导致 Firefox 将其他消息记录到控制台。将此环境变量与 webdriver.firefox.logfile
一起使用,以获取 Firefox 到控制台的输出。
调试 Internet Explorer 驱动
为了从 IEDriverServer.exe 获取详细信息,您可以使用选项 devMode=true 运行测试,此选项会将日志记录级别设置为 DEBUG 并将日志输出重定向到文件 iedriver.log
./go test_ie devMode=true
添加测试
WebDriver 的大多数测试用例都位于 java/client/test/org/openqa/selenium 下。例如,要演示单击元素的问题,应将测试用例添加到 ClickTest。测试用例已经有一个驱动程序实例 - 无需创建。测试使用由进程内服务器提供的页面,这些页面来自 common/src/web。它们的 URL 由 Pages 类提供,因此在添加页面时也将其添加到 Pages 类。
手动与 RemoteWebDriverServer
交互
我们可以使用 Web 浏览器或 telnet 等工具与 RemoteWebDriverServer 交互,例如调试 JSON 协议。这是一个检查安装在本地机器上的服务器状态的简单示例
在 Web 浏览器中
http://localhost:8080/wd/hub/status/
在 telnet 中
telnet localhost 8080
GET /wd/hub/status/ HTTP/1.0
在 Mac 和 Unix 中,通常尝试使用 curl
curl http://localhost:8080/wd/hub/status
在 linux 上使用 wget
wget http://localhost:8080/wd/hub/status
在所有这些情况下,RemoteWebDriverServer 都应响应
{status:0}