透过源码看本质-关于Selenium Webdriver 实现原理的一点思考和分享

作为一名使用Selenium开发UI自动化多年的工程师,一直都对Selenium Webdriver的实现原理感觉不是很清楚。怎么就通过脚本控制浏览器进行各种操作了呢?相信很多Selenium的使用者也会有类似的疑惑。最近针对这个问题看了不少了文章和书籍,在加上一点自己的思考和整理,与大家一起分享,一起学习。文章中如果有不准确的地方,希望大家给予指正。结构想要使用Selenium实现自动化测试...
摘要由CSDN通过智能技术生成

作为一名使用Selenium开发UI自动化多年的工程师,一直都对Selenium Webdriver的实现原理感觉不是很清楚。怎么就通过脚本控制浏览器进行各种操作了呢?相信很多Selenium的使用者也会有类似的疑惑。最近针对这个问题看了不少了文章和书籍,在加上一点自己的思考和整理,与大家一起分享,一起学习。文章中如果有不准确的地方,希望大家给予指正。

结构

想要使用Selenium实现自动化测试,主要需要三个东西。

  • 测试代码
  • Webdriver
  • 浏览器
测试代码

测试代码就是程序员利用不同的语言和相应的selenium API库完成的代码。本文将以python为例进行说明。

Webdriver

Webdriver是针对不同的浏览器开发的,不同的浏览器有不同的webdriver。例如针对Chrome使用的chromedriver。

浏览器

浏览器和相应的Webdriver对应。

首先我们来看一下这三个部分的关系。
对于三个部分的关系模型,可以用一个日常生活中常见的例子来类比。
关系模型

对于打的这个行为来说,乘客和出租车司机进行交互,告诉出租车想去的目的地,出租车司机驾驶汽车把乘客送到目的地,这样乘客就乘坐出租车到达了自己想去的地方。
这和Webdriver的实现原理是类似的,测试代码中包含了各种期望的对浏览器界面的操作,例如点击。测试代码通过给Webdriver发送指令,让Webdriver知道想要做的操作,而Webdriver根据这些操作在浏览器界面上进行控制,由此测试代码达到了在浏览器界面上操作的目的。
理清了Selenium自动化测试三个重要组成之间的关系,接下来我们来具体分析其中一个最重要的关系。

测试代码与Webdriver的交互

接下来我会以获取界面元素这个基本的操作为例来分析两者之间的关系。
在测试代码中,我们第一步要做的是新建一个webdriver类的对象:

from selenium import webdriver
driver = webdriver.Chrome()

这里新建的driver对象是一个webdriver.Chrome()类的对象,而webdriver.Chrome()类的本质是

from .chrome.webdriver import WebDriver as Chrome

也就是一个来自chrome的WebDriver类。这个.chrome.webdriver.WebDriver是继承了selenium.webdriver.remote.webdriver.WebDriver

from selenium.webdriver.remote.webdriver import WebDriver as RemoteWebDriver
...
class WebDriver(RemoteWebDriver):
    """
    Controls the ChromeDriver and allows you to drive the browser.

    You will need to download the ChromeDriver executable from
    http://chromedriver.storage.googleapis.com/index.html
    """

    def __init__(self, executable_path="chromedriver", port=0,
                 chrome_options=None, service_args=None,
                 desired_capabilities=None, service_log_path=None):
...

以python为例,在selenium

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值