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:\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的工作原理的更多相关文章
- Selenium WebDriver的工作原理
先通过一个简单的类比说个好理解的,这个比喻是我从美版知乎Quora上看到的,觉得比较形象.好理解拿来用用. 我们可以把WebDriver驱动浏览器类比成出租车司机开出租车. 在开出租车时有三个角色: ...
- Selenium----Selenium WebDriver /RC工作原理
1.Selenium RC 工作原理 说明:客户端库文件将命令传递给server.接着server使用selenium-core的javaScript命令传递给浏览器,浏览器会使用自带的javaScr ...
- [转载]WebDriver工作原理
转载自:https://www.cnblogs.com/testermark/p/3546287.html WebDriver的工作原理: 在我们new一个WebDriver的过程中,Seleniu ...
- WebDriver工作原理
http://www.cnblogs.com/timsheng/archive/2012/06/12/2546957.html 通过研究selenium-webdriver的源码,笔者发现其实webd ...
- Selenium WebDriver 工作原理
WebDriver与之前Selenium的js注入实现不同:Selenium通过JS来定位元素处理元素(基本上所有元素都可以定位到)WebDriver通过WebDriver API定位处理元素:通过浏 ...
- Selenium2工作原理
Selenium 经历了两个版本,Selenium 1.0 和 Selenium 2.0,本文仅介绍Selenium2的原理,在Selenium 2.0 主推的是WebDriver,Selenium2 ...
- selenium工作原理详解
selenium简介 Selenium是一个用于Web应用程序自动化测试工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, 8, 9, 10, 11), ...
- Selenium WebDriver的实现及工作原理
笔者最近研究学习了selenium的实现和工作原理,阅读了selenium3.141.59的Java源码,没有读完哈...重点从两个接口(org.openqa.selenium.WebDriver和o ...
- Selenium1工作原理
内容主要转自:Selenium工作原理 http://blog.csdn.net/five3/article/details/6790925 简介: Selenium 1.0中可以使用多种语言编程,当 ...
随机推荐
- Immutable.js – JavaScript 不可变数据集合
不可变数据是指一旦创建就不能被修改的数据,使得应用开发更简单,允许使用函数式编程技术,比如惰性评估.Immutable JS 提供一个惰性 Sequence,允许高效的队列方法链,类似 map 和 f ...
- Hexo - 快速,轻量,强大的 Node.js 博客框架
Hexo 是一个快速,轻量,强大的 Node.js 博客框架.带给你难以置信的编译速度,瞬间生成静态文件:支持 Markdown,甚至可以在 Hexo 中集合 Octopress 插件:只需要一个命令 ...
- javascript中this关键字详解
不管学习什么知识,习惯于把自己所学习的知识列成一个list,会有助于我们理清思路,是一个很好的学习方法.强烈推荐. 以下篇幅有点长,希望读者耐心阅读. 以下内容会分为如下部分: 1.涵义 1.1:th ...
- <!DOCTYPE>
定义和用法 所有浏览器都支持 <!DOCTYPE> 声明. <!DOCTYPE> 声明必须是 HTML 文档的第一行,位于 <html> 标签之前. <!D ...
- 27款后台管理页面设计 DIV+CSS+JS
-----------. 演示: http://www.websjy.com/club/websj ... _61040268/index.htm http://www.websjy.com/club ...
- Hadoop 2.5.1集群安装配置
本文的安装只涉及了hadoop-common.hadoop-hdfs.hadoop-mapreduce和hadoop-yarn,并不包含HBase.Hive和Pig等. http://blog.csd ...
- 如何找回Oracle中system,sys用户的密码[转]
Oracle中如果不知道system,sys用户的密码后可用如下方法找回: 首先以一个普通用户等入数据库: 在SQL*Plus中执行如下命令: SQL>connect/as sysdba (也可 ...
- 8月7号晚7点Autodesk北京办公室,我们来聊聊HTML5/ WebGL 3D 模型浏览技术
Autodesk 发布了一款完全无需插件的三维模型浏览器 Autodesk 360 Viewer,大家有没有兴趣,下班后过来聊聊吧! 8月7号 周四, 19:00~21:00 Autodesk北京 ...
- wordpress语言切换
如果你想更改WordPress的语言,比如将英文版转换为中文版,或者将中文版转换为英文版,该如何操作?其实很简单,打开网站根目录下的 wp-config.php,然后搜索 define('WPLANG ...
- 【代码笔记】iOS-判断中英文混合的字符长度的两种方法
一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. ...