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:\seleniumjar\mycorejar\selenium\selenium-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}

webdriver的工作原理的更多相关文章

  1. Selenium WebDriver的工作原理

    先通过一个简单的类比说个好理解的,这个比喻是我从美版知乎Quora上看到的,觉得比较形象.好理解拿来用用. 我们可以把WebDriver驱动浏览器类比成出租车司机开出租车. 在开出租车时有三个角色: ...

  2. Selenium----Selenium WebDriver /RC工作原理

    1.Selenium RC 工作原理 说明:客户端库文件将命令传递给server.接着server使用selenium-core的javaScript命令传递给浏览器,浏览器会使用自带的javaScr ...

  3. [转载]WebDriver工作原理

    转载自:https://www.cnblogs.com/testermark/p/3546287.html WebDriver的工作原理:  在我们new一个WebDriver的过程中,Seleniu ...

  4. WebDriver工作原理

    http://www.cnblogs.com/timsheng/archive/2012/06/12/2546957.html 通过研究selenium-webdriver的源码,笔者发现其实webd ...

  5. Selenium WebDriver 工作原理

    WebDriver与之前Selenium的js注入实现不同:Selenium通过JS来定位元素处理元素(基本上所有元素都可以定位到)WebDriver通过WebDriver API定位处理元素:通过浏 ...

  6. Selenium2工作原理

    Selenium 经历了两个版本,Selenium 1.0 和 Selenium 2.0,本文仅介绍Selenium2的原理,在Selenium 2.0 主推的是WebDriver,Selenium2 ...

  7. selenium工作原理详解

    selenium简介 Selenium是一个用于Web应用程序自动化测试工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, 8, 9, 10, 11), ...

  8. Selenium WebDriver的实现及工作原理

    笔者最近研究学习了selenium的实现和工作原理,阅读了selenium3.141.59的Java源码,没有读完哈...重点从两个接口(org.openqa.selenium.WebDriver和o ...

  9. Selenium1工作原理

    内容主要转自:Selenium工作原理 http://blog.csdn.net/five3/article/details/6790925 简介: Selenium 1.0中可以使用多种语言编程,当 ...

随机推荐

  1. iOS 适配iOS9

    1.网络接口不支持https协议,在iOS9下 在iOS9下,系统默认会拦截对http协议接口的访问,因此无法获取http协议接口的数据. 解决方案(以下方法2选1): (1)暂时退回到http协议 ...

  2. SharePoint 2013必备组件离线包安装:AppFabric无法安装问题解决

    由于没有网络,无法使用sharepoint2013的安装必备软件的在线下载向导安装,当要安装 SharePoint 2013 的服务器与 Internet 隔离时,通常需要从脱机位置安装必备组件.即使 ...

  3. 计算DEM上的Profile图

    #!/usr/bin/env python # -*- coding: utf-8 -*- import sys, gdal, os from gdalconst import GA_ReadOnly ...

  4. 为什么你找不到优秀的GISer?

    每年的三四月是招聘的黄金时节,故有金三银四的说法.求贤纳才对于处在发展上升期的公司来说,是全年性的常态化工作.只是这俩月市场上求职者数量较别的月份多.基数大了,淘到金子的概率自然会增加.大部分公司的伯 ...

  5. ftp安全设置

    1.文件介绍 /etc/pam.d/vsftpd中ftpuser.user_list文件说明:(在file=后添加改文件路径)/etc/vsftpd.conf中userlist_enable.user ...

  6. html前端总结

    1.设置图片的最大宽高的css<style> .img-max { max-height:50px; width:expression(document.body.clientHeight ...

  7. [IOS]edgesForExtendedLayout、automaticallyAdjustsScrollViewInsets

    在IOS7以后 ViewController 开始使用全屏布局的,而且是默认的行为通常涉及到布局 就离不开这个属性 edgesForExtendedLayout,它是一个类型为UIExtendedEd ...

  8. Android下创建一个SQLite数据库

    数据库:SQLite(轻量级,嵌入式的数据库) 大量的相似结构的数据的储存,快速的查询.特殊的文件(按照一定的格式生成) 数据库的创建 创建文件 1.声明文件对象,文件是不会被创建出来的. File ...

  9. 手机影音1--SplashActivity

    /** * 1.设置被启动的Activity为单例模式 */ public class SplashActivity extends Activity { /** * 是否已经启动主页面 */ pri ...

  10. 网站错误记录:Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool.

    今天看公司项目的错误日志文件,发现日志文件都是记录的这个错误. 经过网站查找,发现英文翻译是: 译:超时,与连接池的连接时间已过.这种情况发生是因为连接池在使用和最大连接池数目已满 通过翻译,可以看出 ...