WebDriver-Backed Selenium-RC
Java 版本的 WebDriver 提供了一套 Selenium-RC API 的实现。这意味着你可以使用 WebDriver 技术底层的 Selenium-RC API。这从根本上提供了向后兼容。这使得那些使用了 Selenium-RC API 的测试套件可以使用 WebDriver。这缓和了到 WebDriver 的迁移成本。同时,也允许你在同一个测试中使用两者的 API。
Selenium-WebDriver 的用法如下:
// 你可以使用任何 WebDriver 的实现,这里以 Firefox 的为例。
WebDriver driver = new FirefoxDriver();
// 基准 url,selenium 用于解析相对路径。
String baseUrl = "http://www.google.com";
// 创建一个 Selenium 实现。
Selenium selenium = new WebDriverBackedSelenium(driver, baseUrl);
// 使用 selenium 进行一些操作。
selenium.open("http://www.google.com");
selenium.type("name=q", "cheese");
selenium.click("name=btnG");
// Get the underlying WebDriver implementation back. This will refer to the
// same WebDriver instance as the "driver" variable above.
WebDriver driverInstance = ((WebDriverBackedSelenium) selenium).getWrappedDriver();
// 最后,通过调用 WebDriverBackedSelenium 实例的 stop 方法关闭浏览器。
// 应该避免使用 quit 方法,因为这样,在浏览器关闭后 jvm 还会继续运行。
selenium.stop();
优势
- 允许 WebDriver 和 Selenium API 并存。
- 提供了简单的机制从 Selenium RC API 迁移至 WebDriver。
- 不需要运行 Selenium RC server。
劣势
- 没有实现所有的方法。
- 一些高级用法可能无效(例如 Selenium Core 中的 “browserbot” 或其他内置的 js 方法)。
- 由于底层的实现,有些方法会比较慢。
Backing WebDriver with Selenium
WebDriver 支持的浏览器数量没有 Selenium RC 多,所以如果希望使用 WebDriver 时获得更多的浏览器支持,你可以使用 SeleneseCommandExecutor。
通过下面的代码,WebDriver 可以支持 safari(确保禁用弹出层):
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setBrowserName("safari");
CommandExecutor executor = new SeleneseCommandExecutor(new URL("http://localhost:4444/"), new URL("http://www.google.com/"), capabilities);
WebDriver driver = new RemoteWebDriver(executor, capabilities);
这种方案有一些明显的限制,特别是 findElements 不会如预期工作。同时,我们使用了 Selenium Core 来驱动浏览器,所以你也会受到 JavaScript 的沙箱限制。
运行 Selenium Server 以使用 RemoteDrivers
从 Selenium 下载页面 下载 selenium-server-standalone-.jar,你也可以选择下载 IEDriverServer。如果你需要测试 chrome,则从 google code 下载它。
把 IEDriverServer 和 chromedriver 解压到某个路径,并确保这个路径在 $PATH / %PATH% 中,这样 Selenium Server 就可以不需要任何设置就能操作 IE 和 chrome。
从命令行启动服务:
java -jar <path_to>/selenium-server-standalone-<version>.jar
如果你希望使用本地事件功能,在命令行添加以下参数:
-Dwebdriver.enable.native.events=1
查看帮助:
java -jar <path_to>/selenium-server-standalone-<version>.jar -help
为了运转正常,以下端口应该允许 TCP 请求链接:4444, 7054-5(或两倍于你计划并发运行的实例数量)。在 Windows 中,你可能需要 unblock 这个应用。