底层原理(二)驱动与浏览器交互

1.首先下载chromedriver与selenium-server-standalone.jar
下载地址:
(1)chromedriver各版本下载地址:http://chromedriver.storage.googleapis.com/index.html
(2)selenium-server-standalone.jar各版本下载地址:https://github.com/adamhooper/selenium-server-standalone-jar/

我演示用的是chromedriver2.24与selenium-server-standalone-2.52.0.jar版本。如果chromedriver与selenium-server-standalone.jar版本不兼容的情况下,下面会提示。

2.启动selenium server服务
进入chromedriver与selenium-server-standalone-2.52.0.jar的目录下,执行java -Dwebdriver.chrome.driver="chromedriver.exe" -jar selenium-server-standalone-2.52.0.jar。
我是放在同一目录下的,如果不同目录则要指明路径。

(1)启动成功如下图


image.png

(2)如果chromedriver与selenium-server-standalone.jar版本不兼容的情况下,会提示使用selenium-server的版本,如下图


image.png

我特意用了3.5.3的jar包,报错了,提示我用52.0的,于是下载了2.52.0的jar成功启动。

3.启动成功后创建session

(1)在浏览器中输入http://localhost:4444/wd/hub/static/resource/hub.html 地址访问,打开如下图

image.png

(2)创建session,点击Create Session按钮,然后选择chrome创建,这时会启动一个浏览器窗口,并且生成一串session值,


image.png

image.png

(3)点击Load Script按钮,弹出对话框输入url地址,这时观察新的窗口会打开输入的url地址。

image.png

从这里就可以看出两点:
(1)打开浏览器的操作,会得到一个sessionid,并且打开一个新窗口;
(2)然后基于这个sessionid来判断在那个窗口输入url。

4.发送命令请求

(1)接下来就要看看webdriver的说明了,地址:https://www.w3.org/TR/webdriver/
(2)找到webdriver的接口地址,下面就演示几个接口,由于很多都没有例子,都要自己摸索。
(3)先看打开url的接口,如下图:

image.png

接下来就以postman这个工具来实现接口请求。
image.png

接口名为Go,在RobotFramework中也有个Go关键字,而Selenium+java中是用到Get方法,而实际上webDriver也是在2017才改了这个名字,之前都是叫Get。

其实这个接口就跟第三步第三点操作点击Load Script输入url打开是一样的,我们抓包看看地址就知道了,如下图:


image.png

(4)再来个放大浏览器的操作,如下图

image.png

image.png

(5)然后就开始查找元素啦,找到元素得到元素的id值


image.png

image.png

(6)通过elementid值来输入内容

image.png

image.png

浏览器中结果发现,数组中多个也是会输入在一起,这里有点不明白的是为什么要用数组来存值,API中也没说的太清楚。


image.png

5.总结

以java代码为例说明一下:

WebDriver driver = new ChromeDriver();

driver.get("http://www.baidu.com");

driver.findElement(By.xpth("//input[@id='kw']")).sendkeys("seleniumwebdriver");

上面三个步骤,根据上面的原理来解释一下。

(1)第一步:会先启动一个webdriver服务,并且访问http://localhost:4444/wd/hub/static/resource/hub.html创建session,然后webdriver带着sessionid去调用浏览器api新建了窗口

(2)第二步:driver这个对象就等同于sessionid,当执行第二步这行代码,实际是去请求webdriver的get接口,然后webdriver收到请求后,去调浏览器API输入url访问,因为有了sessionid,所以webdriver、浏览器知道是在那个窗口打开url。

(3)第三步:请求webdriver的find element接口,参数xpath、value值,拿到elementid,然后再去请求webdriver的element send keys接口,webdriver调用浏览器API输入值。看是一步,实际是有两次请求完成这步的,因为selenium-java.jar封装,所以明眼看不出来而已。

所以很明显了,实际是我们去请求webdriver,然后webdriver去调用浏览器,其他API我就不一一去试了,大家有空也可以自己玩玩,还是挺有意思的。
————————————————
版权声明:本文为CSDN博主「雨墨轩痕」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ouyanggengcheng/article/details/78028215

你可能感兴趣的:(底层原理(二)驱动与浏览器交互)