• webdriver的工作原理


    selenium1的原理就是使用js来驱动浏览器,因为现在基本不用,所以不做过多讨论,下面是我整理的webdriver的工作原理,大致就是通过命令请求webdriver,然后webdriver通过浏览器的api去做操作,并返回响应结果。用的协议是json  wire protocol,下面简单画了个流程图,不一定准确,只是个人理解。详细的可以参考官方W3C介绍:https://www.w3.org/TR/2016/WD-webdriver-20160120/

    下面我看下webdriver和浏览器的信息交互:

    1.启动cmd,进入chromedriver.exe所在目录,输入

    java -Dwebdriver.chrome.driver="chromedriver.exe" -jar D:seleniumjarmycorejarseleniumselenium-server-standalone-2.47.1.jar

    2.看到提示以下信息则说明启动成功。

    3.启动后,开始编写测试代码

        public static void testChrome() {
            DesiredCapabilities aDesiredcap = DesiredCapabilities.chrome();  
            //aDesiredcap.setBrowserName("chrome");
            aDesiredcap.setPlatform(Platform.WINDOWS);
            WebDriver dr;
            try {
                dr = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), aDesiredcap);
                dr.get("http://www.baidu.com");
                dr.findElement(By.id("kw")).sendKeys("qiaoyeye");
                Thread.sleep(3000);
                dr.quit();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 
        }

    4.运行后,控制台打印的信息如下

    由此可见,代码的一个请求命令,webdriver都会封装一个executing,发送过去,发送成功后,再返回一个done表示处理成功。如果发生了异常,如找不到页面元素,则会在执行时抛异常

    如果上面的看着还不够透彻,下面我们直接用webdriver的协议提供给我们的接口去操作。

    1.首先在浏览器输入http://localhost:4444/wd/hub,通过以下方式拿到sessionid:fc6f9497-330f-4d6c-abe0-bd0587e57101

    2.拿到session后,就可以请求拉,首先我们用接口访问个百度,接口地址:http://localhost:4444/wd/hub/session/5c81a944-55c6-4c2a-9e01-689bc43d335d/url,请求json内容:{"url": "http://www.baidu.com/"}。post后见下图

    3.查找百度搜索的输入框。使用接口/session/{session id}/element,post请求,json内容:

    {
    "using": "id",
    "value": "kw"
    }

    4.查找到后,我们要往输入框输入内容,调用接口:/session/{session id}/element/{element id}/value,post请求,json内容:

    {
    "value": [
    "qiaoyeye"
    ]
    }

    注意:element id是第三步中的响应结果json中的{"ELEMENT":"0"}0值

    贴一个响应内容:

    {"sessionId":"5c81a944-55c6-4c2a-9e01-689bc43d335d","status":0,"state":"success","value":{"ELEMENT":"2"},"class":"org.openqa.selenium.remote.Response","hCode":1713842970}

  • 相关阅读:
    更快的datetime string to python datetime转换模块 ciso8601
    华为新员工入职培训计划曝光!你留不住员工的原因就在这! zz
    在vmware中安装macos系统 vm12 osx10.11 or higher
    vmware for linux (centos65) 卸载相关
    第八章多态
    第七章 复用类
    第六章 访问权限控制
    Think in Java 第四 五 章
    Think in Java 第三章操作符
    Thank in Java
  • 原文地址:https://www.cnblogs.com/qiaoyeye/p/5284232.html
Copyright © 2020-2023  润新知