当前位置:网站首页>UI自动化测试从此告别手动下载浏览器驱动
UI自动化测试从此告别手动下载浏览器驱动
2022-07-05 03:36:00 【小码哥说测试】
感谢您抽出
“大家在做UI自动化的时候,最烦的是什么呢,是元素定位还是浏览器与驱动兼容调试?我们接着往下看
”
一.SeleniumWebDriver
SeleniumWebDriver
是一个允许以编程方式控制Web
浏览器的库。它提供了一个跨浏览器的API
,可用于驱动使用不同编程语言(如Java
、JavaScript
、Python
、C#
或Ruby
)的浏览器(如Chrome
、Edge
或Firefox
等)。Selenium WebDriver
的主要用途是实现Web
应用程序的自动化测试。
SeleniumWebDriver
使用每个浏览器的本机支持实现自动化。出于这个原因,我们需要在使用Selenium WebDriver API
的测试和要控制的浏览器之间放置一个名为Driver
的二进制文件。现在主流网页浏览器的驱动程序有ChromeDriver (Chrome)
,geckoDriver (Firefox)
,或者msededriver (Edge)
。WebDriver API
和驱动程序二进制文件之间的通信是使用名为W3C WebDriver
(以前称为JSON Wire Protocol
)的标准协议完成的。然后,使用每个浏览器的本机功能完成驱动程序和浏览器之间的通信。
我们根据不同浏览器以及浏览器版本去手动下载对应浏览器的相应版本的driver
,设置系统属性。
System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");
System.setProperty("webdriver.gecko.driver", "/path/to/geckodriver");
System.setProperty("webdriver.edge.driver", "/path/to/msedgedriver");
System.setProperty("webdriver.opera.driver", "/path/to/operadriver");
System.setProperty("webdriver.ie.driver", "C:/path/to/IEDriverServer.exe");
我们在做UI
自动化的时候经常会遇到浏览器升级导致与driver
版本不匹配的问题,解决办法就是手动下载对应版本的driver
,对于初学者,这并不是一个简单的工作,有没有什么办法可以根据不同浏览器自动下载对应版本的driver
呢?答案肯定是有的,就是我们本次要讲的WebDriverManager
。对Java
和Python
都支持哦。
二.WebDriverManager简介
WebDriverManager
是一个开源的Java
库,当然也有Python
版本,它以完全自动化的方式执行Selenium WebDriver
所需的驱动程序的管理(例如下载、设置和维护)。另外,在版本5中,WebDriverManager
还提供了其他相关功能,比如发现安装在本地系统中的浏览器,构建WebDriver
对象(如ChromeDriver
、FirefoxDriver
、 EdgeDriver
等) ,在Docker
容器中无缝运行浏览器,以及监控功能。
三.WebDriverManager实战(Java版)
1.pom.xml中添加WebDriverManager依赖
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>5.0.3</version>
<exclusions>
<exclusion>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</exclusion>
</exclusions>
</dependency>
2.新建一个测试脚本,来测试下
import io.github.bonigarcia.wdm.WebDriverManager;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
/**
* @author 作者:测试工程师成长之路
* @version 创建时间:2022/7/3
* 类说明:自动下载Chrome浏览器驱动
*/
public class OperateBrowserDriver {
public static void main(String[] args) throws InterruptedException {
WebDriverManager.chromedriver().setup();
WebDriver driver = new ChromeDriver();
driver.get("http://www.cnblogs.com/mrjade/");
Thread.sleep(1000);
driver.quit();
}
}
3.执行结果
4.driver存放路径(以Macos为例)
四.WebDriverManager实战(Python版)
1.安装
pip install webdriver-manager
2.使用
# coding=utf-8
'''
@Author : 测试工程师成长之路
@Time : 2022/7/3 12:13
@Desc : 方法描述
@Software: PyCharm
'''
import time
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get("https://www.baidu.com/")
time.sleep(5)
driver.quit()
3.执行结果
4.driver存放路径(以Macos为例)
四.官方文档
更多浏览器操作请参考官网文档
https://bonigarcia.dev/webdrivermanager/
学习资源分享
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走
这些资料,对于想【进阶测试开发】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助…….
边栏推荐
- Blue Bridge Cup single chip microcomputer -- PWM pulse width modulation
- 【无标题】
- Thread Basics
- Une question est de savoir si Flink SQL CDC peut définir le parallélisme. Si le parallélisme est supérieur à 1, il y aura un problème d'ordre?
- Accuracy problem and solution of BigDecimal
- What is the most effective way to convert int to string- What is the most efficient way to convert an int to a String?
- NEW:Devart dotConnect ADO.NET
- Yyds dry goods inventory embedded matrix
- Machine learning experiment report 1 - linear model, decision tree, neural network part
- How to define a unified response object gracefully
猜你喜欢
Class inheritance in C #
51 independent key basic experiment
Installation of postman and postman interceptor
A brief introduction to the behavior tree of unity AI
KVM virtualization
[luat-air105] 4.1 file system FS
一文带你了解BI的前世今身与企业数字化转型的关系
Blue Bridge Cup single chip microcomputer -- PWM pulse width modulation
程序员的视力怎么样? | 每日趣闻
How about programmers' eyesight| Daily anecdotes
随机推荐
Share the newly released web application development framework based on blazor Technology
[wp]bmzclub几道题的writeup
In MySQL Association query, the foreign key is null. What if the data cannot be found?
Logstash、Fluentd、Fluent Bit、Vector? How to choose the appropriate open source log collector
SPI and IIC communication protocol
Redis之Jedis如何使用
Clickhouse物化视图
It took two nights to get Wu Enda's machine learning course certificate from Stanford University
JWT vulnerability recurrence
[groovy] groovy environment setup (download groovy | install groovy | configure groovy environment variables)
Nmap使用手册学习记录
Dart series: collection of best practices
C # use awaiter
Asemi rectifier bridge 2w10 parameters, 2w10 specifications, 2w10 characteristics
Delphi read / write JSON format
Blue Bridge Cup single chip microcomputer -- PWM pulse width modulation
[Chongqing Guangdong education] 2777t green space planning reference questions of National Open University in autumn 2018
[learning notes] month end operation -gr/ir reorganization
Installation of postman and postman interceptor
SQL performance optimization skills