在Selenium的幕后工作

时间:2014-04-15 05:02:37

标签: dom selenium selenium-webdriver webdriver

作为一名硒测试开发人员,我总是使用WebDriver,其知识仅限于在开发测试脚本时使用该工具。但我很想知道WebDriver如何与浏览器内部上的页面进行交互。

我的问题是:

  1. 我读过webdriver直接与自动化交互 浏览器的引擎,而不是像Selenium一样执行Javascript RC。这是否意味着WebDriver不执行Javascript 在所有情况下?这是否意味着与DOM交互的方式不止一种?我相信Javascript是在浏览器上访问/解析DOM的唯一方法。
  2. Selenium RC使用代理来消除同源策略的问题。 WebDriver如何解决同源策略的问题?

  3. WebDriver使用JSON有线协议。但是在组件中的位置 WebDriver是使用JSON Wire协议吗?它是否用在驱动程序中 不同浏览器?或者它是否在Language Bindings API中使用?

  4. 当我的代码是: WebDriver driver = new ChromeDriver(); driver.get("http://www.google.com"); WebElement searchField = driver.findElement(By.name("q")); searchField.sendKeys("selenium"); 执行上述代码时,WebDriver如何访问DOM?
  5. 如果有人可以向我详细解释这些内容,那将会非常有帮助。我想制作一个关于WebDriver内部工作的社区维基,希望能帮助任何人搜索这个主题。提前谢谢!

1 个答案:

答案 0 :(得分:9)

与浏览器通信的WebDriver的所有实现或RemoteWebDriver服务器都使用通用的有线协议。此有线协议使用JSON over HTTP定义RESTful Web服务。

因此,每个WebDriver命令都通过WebDriver服务映射到HTTP方法,然后传递给HTTP命令处理器以与浏览器通信。 Command响应通过WebDriver服务作为HTTP / 1.1响应消息返回。

不同的驱动程序(例如Firefox驱动程序和IE驱动程序)具有不同的实现来完成上述操作。

下面链接的Selenium WebDriver架构文档详细介绍了如何实现这些文档以及WebDrvier命令如何流入浏览器并返回。 有关Firefox驱动程序的详细信息,请阅读第16.6节。

The Architecture of Open Source Applications - Selenium WebDriver
作者:Simon Stewart(WebDriver的创建者,也是Selenium项目的核心贡献者)

此外,有关The WebDriver Wire Protocol的详细信息将有助于了解HTTP方法的映射方式。