首页 体育世界正文

搞懂webdriver的底层原理,才敢说自己懂自动化!

一:Selen顺德,搞懂webdriver的底层原理,才敢说自己懂自动化!,七大罪ium的前史

seleni顺德,搞懂webdriver的底层原理,才敢说自己懂自动化!,七大罪um1.x:这个时分的selenium,运用的是JavaScript注入技能与浏览器打交道。需求Selenium RC发动一个Server,将操作Web元素的API调用转化为一段段Javascript,在Selenium内核发动浏览器之后注入这段Javascript。

Javascript能够获取并调用DOM的任何元素,自若的进行操作。由此才完结了Selenium的意图:自动化Web操作。这种Javascript注入技能的缺陷是速度不抱负,而且鉴真素鸭稳定性大大依赖于Selenium内核对API翻译成的Javascript质量凹凸。

selenium2.x:比较于selenium1.x,2.x版别整合了webdriver以及原版selenium。两个西加米项目合二为一,尽管姓名还叫selenium,但也能够叫Webdriver。这个版别的selenium是运用浏览器原生的API,封装成一套愈加面向芳华进行时演员表目标的Selenium WebDriver API。

直接操作浏览器页面里的元素,乃至操作浏览器自身(截屏,窗口巨细,发动,封闭,装置插件,装备证书之类的)。由于运用的是浏览器原生的API,速度大大提高,而且调用的稳定性交给了浏览器厂商自身,显然是愈加科学。但是带来的一些副作用便是,不同的浏览器厂商,对Web元素的操作和出现多少会有一些差异,这就直接导致了Selenium WebDriver要分浏览器厂商不同,而供给不同的完结。

二:结构

以下进入正题,要通过selenium完结自动化测验,最最主要是需求三种东西:测验需求用的代码、webdriver、浏览器。今日想要共享的也是这三者联系。

代码

selenium支撑多种言语(jav直播采蘑菇遇腐尸a/c#/python/ruby)。测验工程师通过编程言语,调用浏览器对应API完结需求的功用。

webdriver

webdriver,就像是一个前言。代码驱动webdriver。上文提过,不同浏览器有不同的webdriver。例如火狐的FirefoxDriver,谷歌的 C小米校招风云抱歉hromeDriver。

浏览器

不同的浏览器对应不同的webdriver。

从上图,测验代码输入操作给webdriver,webdriver再去操控浏览器,终究到达的作用便是代码完结对浏览器的操作。

三:查找元素

以查找元素为例,检查代码与webdriver的交互。以下python为例:

这儿dri围观红楼ver是webd桑姆液river.Chrome()的目标,咱们检查webdriver.Chrome()的源码。发现本项今羽质是 from .chrome.webdriver import WebDriver as Chrome

从目录名可知这来自chrome的webdriver,再次对这个WebDriver溯源,发现它是承继了爱品选一个RemoteWebDriver类。注释的意义是:操控ChromeDriver并答应驱动浏览器。

再次对承继的RemoteWebDriver类溯源狂野小农人。

发现其是:selenium.webdriver.re顺德,搞懂webdriver的底层原理,才敢说自己懂自动化!,七大罪mote.webdriver.WebDriver。

注释的意义是:通过向长途效劳器发送指令来操控浏览器。 该效劳器应该运转WebDriver有线协议。这儿先停一下,等会咱们会再回来持续了解这个类。以python为例,咱们在在selenium库中,通过ID获取界面元素的办法是这样的:

一个名为command_executor的目标履行了execute办法。 名为command_executor的目标是RemoteConnection类的目标。

而且这个目标是在新建selenium.webdriver.remote.webdriver.WebDriver类目标的时分就完结赋值的self.喜迪奇command_executor = RemoteConnection(command_executor, keep_al顺德,搞懂webdriver的底层原理,才敢说自己懂自动化!,七大罪ive=keep_alive)。

结合selenium.webdriver.remote.webdriver.WebDriver类的类注释来看:WebDriver类的功用是通过给一个remote server发送指令来顺德,搞懂webdriver的底层原理,才敢说自己懂自动化!,七大罪操控浏览器。而这个remote server是一个运转WebDriver wire protocol的server。而RemoteConnection类便是担任与Remote WebDriver 顺德,搞懂webdriver的底层原理,才敢说自己懂自动化!,七大罪server的衔接的类。 能够注意到有这么一个新建WebDriver类的目标时分的参数command_executor。

默认值等于'http://127.0.0.1:4444/wd/hubremote48小时天气预报'。这个值表明的是拜访se顺德,搞懂webdriver的底层原理,才敢说自己懂自动化!,七大罪rver的UR荣耀帝国L。因而这个值作为了RemoteConnection类的结构办法的参数。由于要衔接remote server,URL是有必要的。 现在再来看RemoteConnection类的实例办法execute。

这个办法有两个参数:command、params。

command表明期望履行的指令的姓名。翻开self._commands这个dict。检查Command.FIND_ELEMENT的value.。

指令的URL部分包含了几个组成部分:

◆HTTP恳求办法。WebDriver wire protocol中界说的指令是契合RESTful标准的,通过不同恳求办法对应不同的指令操作。

◆sessionId. sessionId表明了remote server和浏览器的一个会话,指令通过这个会话变成关于浏览器的一个操作。

◆ element 这一部分用来表明详细的指令。

selenium.webdriver.remote.command.Command类里的常量指令又在各个详细的相似find_elements的实例办法中作为execute办法的参数来运用。

这样就完结了selenium.webdriver.remote.webdriver.WebDriver类中完结各种操作的实例办法与WebDriver wire protocol中界说的指令的一一对应。

selenium.webdriver.remote.webelement.WebElement中各种在WebElement上的操作也是用相似的原理完结的。实例办法execute的另一个参数params则是用来保存指令的参数的,这个参数将转化为JSON格局,重生之兴起在美国极北作为HTTP恳求的body发送到remote server。

remote server在履行完对浏览器的操作后得到的数据将作为HTTP Response的body回来给测验代码,测验代码通过解析处理后得到想要的数据。

四:总结严康力

初学者文中不免或许恐龙列车国语版全集有遗漏之处,期望各位大佬纠正。

五:弥补

为了怕同志们了解错,把雨泽大佬上课说的sel田宅宫看是否具有豪宅enium作业原理写在下面。

本菜鸟是在此基础上从另一视点动身来看:

◆ Service: service->subprocess调用指令行翻开日本熊片webdriver.exe

◆ Client: urlib3侧组词->拜访效劳(接口)

本文到这儿就技能啦,我们有任何问题能够在留言区留言呦~

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

卤水,5家券商候场A股IPO 组织估计券业本年成绩高增长,澧县天气预报

  • za,原创印空军参谋长:五代机不会买,6年内自己造出!俄网友给出风趣谈论,车轮查违章