向 Selenium 2 代码添加新的驱动程序
此文档之前位于wiki 上。
简介
WebDriver 有一套全面的测试,描述了新实现的预期行为。为了简单起见,我们假设您正在用 Java 实现驱动程序,但是您可以查看任何现有的实现,了解在阅读本文后我们如何处理更复杂的构建或其他语言。
编写新的 WebDriver 实现
创建新的顶层目录
创建一个新的顶层文件夹,与“common”和“firefox”平行,以您的浏览器命名。在此文件夹中,创建“src/java”和“test/java”目录。很明显,应该把什么放在哪里。
设置测试套件
将现有的测试套件之一复制到您的测试树中,并针对您的新浏览器进行修改。这可能会导致您修改“Ignore.java”类,这是预期的,并在源树中为您的实现添加一个占位符类。您必须包含“common”目录才能获取所有测试。目前,只要没有导致致命崩溃,就保持测试不变。
添加测试套件后,在项目的顶层添加一个“build.desc”CrazyFunBuild 文件。以“htmlunit”目录中的文件为模型。然后,您应该能够使用“go”脚本从命令行运行测试。
此时,我们预计在运行测试时会出现完全和灾难性的失败。
开始实施
如果您的浏览器在进程外运行,则强烈建议使用 JsonWireProtocol。这将使客户端(用户使用的 API)的实现相对便宜,并且意味着您可以以更少的精力获得 Java、C#、Ruby 和 Python 的支持,因为您可以扩展远程客户端。
实施技巧
从哪里开始
如前所述,有一套测试。使这些测试通过的建议顺序大致如下:
- ElementFindingTest - 因为元素定位是关键,所以需要它
- PageLoadingTest
- ChildrenFindingTest — 更多元素查找
- FormHandlingTest
- FrameSwitchingTest
- ExecutingJavascriptTest
- JavascriptEnabledDriverTest
此时,您将有一个相当完整的工作驱动程序。之后,最好使用户交互正确
- CorrectEventFiringTest
- TypingTest
在深入研究尖端内容之前
- AlertsTest
没有必要在继续之前让一个类中的每个测试都工作。我倾向于尽可能深入一个类,然后在遇到困难时切换到列表中的下一个类。这使您可以保持合理的速度,并仍然覆盖基本知识。
运行单个测试
这不是理想的方法,但我们使用的方法是修改公共项目中的 SingleTestSuite 类,然后通过 IDE 的 UI 修改它运行的模块(即,只需进入启动配置(在 IDEA 中)并修改使用的模块:不要移动文件!)。这个类应该是不言自明的。
忽略测试
在某个时候,您会希望停止临时运行测试,并利用持续构建产品来确保您没有引入回归。此时,过程是从命令行运行测试。这将生成一个失败的测试列表。浏览每个测试,并添加或修改与测试关联的“@Ignore”。重新运行测试。可能需要几次迭代,但您的构建最终会变为绿色。不错。
构建在幕后使用 ant,并将日志存储在“build/build_log.xml”中,将测试日志存储在“build/test_logs”中