转自:https://testerhome.com/topics/10248

另一篇:Selenium WebDriver的工作原理

https://blog.csdn.net/yoyocat915/article/details/80246744

需要注意的是,这一篇中提到“浏览器驱动中包含了一个HTTP Server,用来接收这些http请求 ”,那么根据上面的文章,好像应该不是一个 http server, 而是 WebDriver.xpi 插件

又一篇:Webdriver实现原理

https://blog.csdn.net/kellyruan/article/details/41647573

再一篇:appium ,selenium ,webdriver 运行原理与机制

https://www.cnblogs.com/Ronaldo-HD/p/9848324.html

 下面这篇文章记录了 WebDriver 使用 JSON Wire Protocol 和 http server 交互的实质:

https://www.jianshu.com/p/zcB9ai
作者:myersguo
链接:https://www.jianshu.com/p/zcB9ai
来源:简书

WebDriver之JsonWireProtocol###

JsonWireProtocol说明
JsonWireProtocol(以下简称JWP)是通过使用webdriver与remote server进行通信的web service 协议。通过http请求,完成和remote server的交互。

交互过程
下面,我将列出一系列http请求,利用JSP和remote server进行通信,来进行浏览器操作。(注:书写格式为:GET URL 参数)

1. 打开浏览器
即,创建一个新的browser session。
POST http://10.236.122.10:4444/wd/hub/session
{desiredCapabilities:{browserName: 'chrome' }}
结果返回:

{
"status": 0,
"sessionId": "277e823a-8be2-48eb-9001-971cc1bff9c4",
"state": null,
"value": {
"platform": "XP",
"acceptSslCerts": true,
"javascriptEnabled": true,
"browserName": "chrome",
"chrome": {
"userDataDir": "C:\Users\GUOLIA~1\AppData\Local\Temp\scoped_dir4600_564"
},
"rotatable": false,
"locationContextEnabled": true,
"webdriver.remote.sessionid": "277e823a-8be2-48eb-9001-971cc1bff9c4",
"version": "41.0.2272.118",
"takesHeapSnapshot": true,
"cssSelectorsEnabled": true,
"databaseEnabled": false,
"handlesAlerts": true,
"browserConnectionEnabled": false,
"nativeEvents": true,
"webStorageEnabled": true,
"applicationCacheEnabled": false,
"takesScreenshot": true
},
"class": "org.openqa.selenium.remote.Response",
"hCode": 28232762
}

记住上面返回的
"sessionId": "277e823a-8be2-48eb-9001-971cc1bff9c4"
2. 打开一个url
比如,打开百度首页:

POST
http://10.236.122.10:4444/wd/hub/session/277e823a-8be2-48eb-9001-971cc1bff9c4/url
{url :'http://www.baidu.com' }

3. 查找输入框

POST
http://10.236.122.10:4444/wd/hub/session/277e823a-8be2-48eb-9001-971cc1bff9c4/elements
{using:'css selector',value:'#kw'}

返回:
{
"status": 0,
"sessionId": "b6d34570-8300-4507-b60c-ab7cd1fe6536",
"state": "success",
"value": [
{
"ELEMENT": "0"
}
],
"class": "org.openqa.selenium.remote.Response",
"hCode": 30641031
}
记住返回值, 下面要用。
"ELEMENT": "0"
4. 输入元素

POST
http://10.236.122.10:4444/wd/hub/session/277e823a-8be2-48eb-9001-971cc1bff9c4/element/0/value
{value:[hello,world]}

*** 5. 查找OK按钮***
http://10.236.122.10:4444/wd/hub/session/277e823a-8be2-48eb-9001-971cc1bff9c4/elements
{using:'css selector',value:'#su'}
4. 点击OK
http://10.236.122.10:4444/wd/hub/session/277e823a-8be2-48eb-9001-971cc1bff9c4/element/1/click

返回点击成功了:
{
"status": 0,
"sessionId": "277e823a-8be2-48eb-9001-971cc1bff9c4",
"state": "success",
"value": null,
"class": "org.openqa.selenium.remote.Response",
"hCode": 11068806
}

最新文章

  1. ABP理论学习之OData集成(新增)
  2. UVA 10089 Repackaging 数学问题
  3. bash的变量设置
  4. JAVA代码实现下载单个文件,和下载打包文件
  5. [vim配置]windows下在vim中使用gcc/g++编译调试c/cpp文件
  6. MySQL数据类型总结
  7. ubuntu14 部署zookeeper3.4.6启动失败
  8. CSS滤镜
  9. 字符串匹配的python实现
  10. DataTable,DataSet,DataRow与DataView
  11. 分享一个自己写的基于TP的关系模型
  12. Android开发之按键、触摸屏和手势输入专业压力測试方法
  13. 创建并发布npm包
  14. MATLAB实现聚类
  15. 把elipse非maven的Struts2+Spring+Ibatis项目导入Idea中
  16. 201521044091 java 第十周学习总结
  17. [Spark内核] 第37课:Task执行内幕与结果处理解密
  18. CF 716E. Digit Tree [点分治]
  19. tomcat会话之持久化会话管理器
  20. 如何添加“在这里打开PowerShell”到Windows中的上下文菜单

热门文章

  1. docker删除虚悬镜像(临时镜像文件)
  2. TableView 键盘弹起冲突
  3. centos 7 安装 redis-5.0.5
  4. 如何删掉git版本库master分支的第一个commit
  5. zencart模板列表下载地址
  6. 阿里域名 ssl tomcat
  7. iOS中为控件设置颜色渐变和透明度渐变
  8. 根据IP 自动识别国家和城市
  9. hdu3586 Information Disturbing[二分答案+树形DP]
  10. php核心:代际划分/运行环境等