zoukankan      html  css  js  c++  java
  • WebDriver如何工作 (zhuan)

    WebDriver是W3C的一个标准,由Selenium主持。

    具体的协议标准可以从http://code.google.com/p/selenium/wiki/JsonWireProtocol#Command_Reference   查看。

    从这个协议中我们可以看到,WebDriver之所以能够实现与浏览器进行交互,是因为浏览器实现了这些协议。这个协议是使用JOSN通过HTTP进行传输。

    它的实现使用了经典的Client-Server模式。客户端发送一个requset,服务器端返回一个response。

    我们明确几个概念。

    Client

    调用 WebDriverAPI的机器。

    Server

    运行浏览器的机器。Firefox浏览器直接实现了WebDriver的通讯协议,而Chrome和IE则是通过ChromeDriver和InternetExplorerDriver实现的。

    Session

    服务器端需要维护浏览器的Session,从客户端发过来的请求头中包含了Session信息,服务器端将会执行对应的浏览器页面。

    WebElement

    这是WebDriverAPI中的对象,代表页面上的一个DOM元素。

    举个实际的例子,下面代码的作用是”命令”firefox转跳到google主页:

     

           WebDriver driver = new FirefoxDriver();
            //实例化一个
    Driver
     
            driver.get("http://www.google.com");

     

    在执行driver.get("http://www.google.com")这句代码时,client,也就是我们的测试代码向remote server发送了如下的请求:

    POSTsession/285b12e4-2b8a-4fe6-90e1-c35cba245956/url  post_data{"url":"http://google.com"}  

    通过post的方式请求localhost:port/hub/session/session_id/url地址,请求浏览器完成跳转url的操作。

    如果上述请求是可接受的,或者说remote server是实现了这个接口,那么remote server会跳转到该post data包含的url,并返回如下的response

    {"name":"get","sessionId":"285b12e4-2b8a-4fe6-90e1-c35cba245956","status":0,"value":""} 

    response中包含如下信息

    name:remote server端的实现的方法的名称,这里是get,表示跳转到指定url;

    sessionId:当前session的id;

    status:请求执行的状态码,非0表示未正确执行,这里是0,表示一切ok不许担心;

    value:请求的返回值,这里返回值为空,如果client调用title接口,则该值应该是当前页面的title;

    如果client发送的请求是定位某个特定的页面元素,则response的返回值可能是这样的:

    {"name":"findElement","sessionId":"285b12e4-2b8a-4fe6-90e1-c35cba245956","status":0,"value":{"ELEMENT":"{2192893e-f260-44c4-bdf6-7aad3c919739}"}} 

    name,sessionId,status跟上面的例子是差不多的,区别是该请求的返回值是ELEMENT:{2192893e-f260-44c4-bdf6-7aad3c919739},表示定位到元素的id,通过该id,client可以发送如click之类的请求与 server端进行交互。

  • 相关阅读:
    ASP.NET AJAX Progress Bar Control(转)
    asp.net 页面右下角弹出类似QQ或MSN的消息提示
    用31个免费在线工具来测试你网站各项性能
    HtmlTextWriter学习<转>
    .NET企业级应用架构设计系列之应用服务器
    .NET企业级应用架构设计系列之开场白
    Asp.Net应用程序中长时间装载页面时显示进度条
    用JavaScript操作数据库
    UML类图关系全面剖析
    Microsoft® Visual SourceSafe® 6.0 标准版 简介下载
  • 原文地址:https://www.cnblogs.com/backpacker/p/2782631.html
Copyright © 2011-2022 走看看