Selenium WebDriver运行底层逻辑

一、Selenium WebDriver运行原理

Selenium是一种用于Web应用程序自动化测试的开源工具,它支持多种浏览器,如Chrome,Firefox,IE,Safari等。WebDriver是Selenium的一个子项目,是Selenium的一个核心组件,它是一种用于自动化Web应用程序的应用程序编程接口(API),它允许程序员在不同的浏览器上编写自动化测试脚本。因此,Selenium是一种Web自动化测试工具,而WebDriver是Selenium中用于实现自动测试的核心技术。

Selenium WebDriver的运行原理是:

  1. 客户端发送一个请求到WebDriver服务器,要求操作浏览器。

  2. WebDriver服务器接收到请求后,会将请求发送给浏览器驱动程序。

  3. 浏览器驱动程序将请求转换成适合当前浏览器的命令。

  4. 浏览器根据命令来执行相应的动作,比如打开网页、填写表单等。

  5. 浏览器将执行结果反馈给浏览器驱动程序。

  6. 浏览器驱动程序将结果反馈给WebDriver服务器。

  7. WebDriver服务器将结果返回给客户端。

实际上就是启动webdriver,创建一个浏览器驱动,如:

driver = webdriver.Chrome()

基于这个驱动会启动一个浏览器对象,同时会生成一个session来管理浏览器,此时webdriver成为一个代理,其作用是代码通过webdriver下发给浏览器,浏览器将响应传给webdriver,webdriver再转给代码。

二、源码分析

此处以chrome举例

driver = webdriver.Chrome()实际对应的是这个类:
在这里插入图片描述
该类创建的对象实际上是:

from selenium.webdriver.chrome.webdriver import WebDriver
driver = WebDriver()

该类下初始化时有一个参数executable_path=DEFAULT_EXECUTABLE_PATH,其中DEFAULT_EXECUTABLE_PATH = “chromedriver”
在这里插入图片描述
因此实际上创建对象应该是:

driver = WebDriver(executable_path="chromedriver")

此时浏览器就可以启动了

访问网址

在这里插入图片描述
从上图可以看出,访问网址的get方法实际是使用excecute来运行,传入封装的Command类里的GET命令,以及所要访问的网址。
因此可以写成:

driver.execute('get', {'url': 'http://www.jd.com'})

元素定位

在这里插入图片描述
在这里插入图片描述
传入的by和value值由不同定位方式决定,以By.ID为例,则by的值为By.CSS_SELECTOR,value值为’[id=“%s”]’ % value

因此,代码可以写成:

el = driver.execute("findElement", {
    'using': "css selector",
    'value': '[id="key"]'
})['value']

那么其中为什么最后要加上[‘value’]呢,原因是不加上的话,我们运行得来的是:在这里插入图片描述
得到是一个字典,因此我们需要取出value的值(element)

元素输入

在这里插入图片描述
在这里插入图片描述

self._execute(Command.SEND_KEYS_TO_ELEMENT, {'text': "".join(keys_to_typing(value)), 'value': keys_to_typing(value)})的作用是将文本字符串value输入到被选中的元素中,其中keys_to_typing(value)是一个函数,用于将文本转换成selenium能够识别的字符串格式。

因此可以写成:

# el为定位到的元素
el._execute("sendKeysToElement", {
    'text': "sendkeys_value",
    'value': "sendkeys_value"})

元素点击

在这里插入图片描述
在这里插入图片描述

元素点击就比较简单了,直接传Command类的命令就可以了

# el为定位到的元素
el._execute("clickElement")

其它的操作方法也是类似,就不一一列举了

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值