一篇非常好的分析 Selenium 2 和 3 的原理: selenium3:你安装 geckodriver 了吗?
转自:https://testerhome.com/topics/10248
另一篇:Selenium WebDriver的工作原理
需要注意的是,这一篇中提到“浏览器驱动中包含了一个HTTP Server,用来接收这些http请求 ”,那么根据上面的文章,好像应该不是一个 http server, 而是 WebDriver.xpi 插件
又一篇:Webdriver实现原理
再一篇:appium ,selenium ,webdriver 运行原理与机制
下面这篇文章记录了 WebDriver 使用 JSON Wire Protocol 和 http server 交互的实质:
链接: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
}
一篇非常好的分析 Selenium 2 和 3 的原理: selenium3:你安装 geckodriver 了吗?的更多相关文章
- python自动化测试应用-第7篇(WEB测试)--Selenium进阶篇
篇7 python自动化测试应用-Selenium进阶篇 --lamecho 1.1概要 大家好!我是lamecho(辣么丑),本篇文章将是我们介 ...
- python自动化测试应用-第6篇(WEB测试)--Selenium元素篇
篇6 python自动化测试应用-Selenium基础篇 --lamecho 1.1概要 大家好!我是lamecho(辣么丑),上一篇我们搭建好p ...
- 篇5 python自动化测试应用-Selenium环境篇
篇5 python自动化测试应用-Selenium环境篇 --lamecho 1.1概要 大家好!我是lamecho(辣么丑),从本篇开始我将开始 ...
- 外国人专门写了一篇文章,来分析为什么go在中国如此火
外国人专门写了一篇文章,来分析为什么go在中国如此火: <Why is Golang popular in China?> http://herman.asia/why-is-go-pop ...
- 《手把手教你》系列技巧篇(十七)-java+ selenium自动化测试-元素定位大法之By css上卷(详细教程)
1.简介 CSS定位方式和xpath定位方式基本相同,只是CSS定位表达式有其自己的格式.CSS定位方式拥有比xpath定位速度快,且比CSS稳定的特性.下面详细介绍CSS定位方式的使用方法.xpat ...
- Mybatis源码分析--关联表查询及延迟加载原理(二)
在上一篇博客Mybatis源码分析--关联表查询及延迟加载(一)中我们简单介绍了Mybatis的延迟加载的编程,接下来我们通过分析源码来分析一下Mybatis延迟加载的实现原理. 其实简单来说Myba ...
- 从虚拟机指令执行的角度分析JAVA中多态的实现原理
从虚拟机指令执行的角度分析JAVA中多态的实现原理 前几天突然被一个"家伙"问了几个问题,其中一个是:JAVA中的多态的实现原理是什么? 我一想,这肯定不是从语法的角度来阐释多态吧 ...
- RocketMQ源码分析之RocketMQ事务消息实现原理中篇----事务消息状态回查
上节已经梳理了RocketMQ发送事务消息的流程(基于二阶段提交),本节将继续深入学习事务状态消息回查,我们知道,第一次提交到消息服务器时消息的主题被替换为RMQ_SYS_TRANS_HALF_TOP ...
- Spring Ioc源码分析系列--@Autowired注解的实现原理
Spring Ioc源码分析系列--@Autowired注解的实现原理 前言 前面系列文章分析了一把Spring Ioc的源码,是不是云里雾里,感觉并没有跟实际开发搭上半毛钱关系?看了一遍下来,对我的 ...
随机推荐
- Nginx的快速安装
1. 准备工作 1. CenterOS7.x.vmware虚拟机,安装过程参考 https://jingyan.baidu.com/article/eae0782787b4c01fec548535.h ...
- appium 自动化测试环境搭建
最近再学习appium,把学习的过程记录下来,以防止到时候 换个电脑就不知道这么安装搭建appium环境了. 环境搭建: 0.JDK环境是必备的,这里大家自行百度, 1.安装 node 环境,前辈 ...
- Tomcat配置JNDI
JNDI是什么?使用JNDI有什么好处? JNDI是 Java 命名与目录接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之一. 我个人对j ...
- 牛客练习赛46 C 华华跟奕奕玩游戏 (期望,概率)(详解)
链接:https://ac.nowcoder.com/acm/contest/894/C 来源:牛客网 华华跟奕奕玩游戏 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K ...
- 树上倍增求LCA详解
LCA(least common ancestors)最近公共祖先 指的就是对于一棵有根树,若结点z既是x的祖先,也是y的祖先(不要告诉我你不知道什么是祖先),那么z就是结点x和y的最近公共祖先. 定 ...
- python3之selenium.webdriver 库练习自动化谷歌浏览器打开百度自动百度关键字
import os,time,threading from selenium import webdriver from selenium.webdriver.common.keys import K ...
- 高大上的微信小程序中渲染html内容—技术分享
大部分Web应用的富文本内容都是以HTML字符串的形式存储的,通过HTML文档去展示HTML内容自然没有问题.但是,在微信小程序(下文简称为「小程序」)中,应当如何渲染这部分内容呢? 解决方案 wxP ...
- qt5--QLabel标签控件
需要 #include <QLabel> label->setFrameShape(QFrame::Box); //设置边框 边框样式参看:https://www.cnblo ...
- 20. ClustrixDB explain参数解读
ClustrixDB有一个流模型,它从容器(表和索引)开始并通过操作符图对行进行流处理.ClustrixDB有一组丰富的操作符,随着更多功能和优化的添加,这些操作符偶尔会增加.我们使用一个地方来记录操 ...
- Windows:在特定路径下启动命令行
造冰箱的大熊猫,本文适用于Windows 7@cnblogs 2018/11/30 在Windows文件浏览器中,按下“Shift+鼠标右键”,点击“在此处打开命令窗口”.