作为一名硒测试开发人员,我总是使用WebDriver,其知识仅限于在开发测试脚本时使用该工具。但我很想知道WebDriver如何与浏览器内部上的页面进行交互。
我的问题是:
Selenium RC使用代理来消除同源策略的问题。 WebDriver如何解决同源策略的问题?
WebDriver使用JSON有线协议。但是在组件中的位置
WebDriver是使用JSON Wire协议吗?它是否用在驱动程序中
不同浏览器?或者它是否在Language Bindings API中使用?
WebDriver driver = new ChromeDriver();
driver.get("http://www.google.com");
WebElement searchField = driver.findElement(By.name("q"));
searchField.sendKeys("selenium");
执行上述代码时,WebDriver如何访问DOM?如果有人可以向我详细解释这些内容,那将会非常有帮助。我想制作一个关于WebDriver内部工作的社区维基,希望能帮助任何人搜索这个主题。提前谢谢!
答案 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方法的映射方式。