webdriver原理之driver与浏览器交互

时间:2024-03-22 12:17:58
使用selenium与webdriver打交道,大家都知道,是启动webdriver去调用浏览器,来完成操作。今天就主要介绍的详细点,driver与浏览器的亲密交互,主要使用chrome与chromedriver来操作。

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)启动成功如下图
webdriver原理之driver与浏览器交互
(2)如果chromedriver与selenium-server-standalone.jar版本不兼容的情况下,会提示使用selenium-server的版本,如下图
我特意用了3.5.3的jar包,报错了,提示我用52.0的,于是下载了2.52.0的jar成功启动。
webdriver原理之driver与浏览器交互

3.启动成功后创建session
(1)在浏览器中输入http://localhost:4444/wd/hub/static/resource/hub.html 地址访问,打开如下图
webdriver原理之driver与浏览器交互
(2)创建session,点击Create Session按钮,然后选择chrome创建,这时会启动一个浏览器窗口,并且生成一串session值,
webdriver原理之driver与浏览器交互

webdriver原理之driver与浏览器交互

(3)点击Load Script按钮,弹出对话框输入url地址,这时观察新的窗口会打开输入的url地址。
webdriver原理之driver与浏览器交互
从这里就可以看出两点:
(1)打开浏览器的操作,会得到一个sessionid,并且打开一个新窗口;
(2)然后基于这个sessionid来判断在那个窗口输入url。

4.发送命令请求
(1)接下来就要看看webdriver的说明了,地址:https://www.w3.org/TR/webdriver/
(2)找到webdriver的接口地址,下面就演示几个接口,由于很多都没有例子,都要自己摸索。
(3)先看打开url的接口,如下图:
webdriver原理之driver与浏览器交互
接下来就以postman这个工具来实现接口请求,下面也都会用这个工具,因为方便;当然像LoadRunner、Jmeter、SoapUI等接口工具都可以啊,只要是发送接口请求的。我怕你们误会只有postman是google的才可以。
webdriver原理之driver与浏览器交互
接口名为Go,在RobotFramework中也有个Go关键字,而Selenium+java中是用到Get方法,而实际上webDriver也是在2017才改了这个名字,之前都是叫Get。
其实这个接口就跟第三步第三点操作点击Load Script输入url打开是一样的,我们抓包看看地址就知道了,如下图:
webdriver原理之driver与浏览器交互
(4)再来个放大浏览器的操作,如下图
webdriver原理之driver与浏览器交互
webdriver原理之driver与浏览器交互
(5)然后就开始查找元素啦,找到元素得到元素的id值
webdriver原理之driver与浏览器交互
webdriver原理之driver与浏览器交互
当然我用xpath也只是因为我平时用xpath比较多,这里用id、name、css都是可以的,就是我们定位的方法名。
(6)通过elementid值来输入内容
webdriver原理之driver与浏览器交互
webdriver原理之driver与浏览器交互

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

5.总结
以java代码为例说明一下:
WebDriver driver = new ChromeDriver();
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我就不一一去试了,大家有空也可以自己玩玩,还是挺有意思的。

如果以上内容对你有用,麻烦把你微信会支付宝小数点右边的数值,贡献那么一点点意思意思是对我最大的支持。谢谢!
webdriver原理之driver与浏览器交互