当前位置:网站首页>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/
学习资源分享
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走
这些资料,对于想【进阶测试开发】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助…….
边栏推荐
- Hot knowledge of multithreading (I): introduction to ThreadLocal and underlying principles
- De debugging (set the main thread as hidden debugging to destroy the debugging Channel & debugger detection)
- 花了2晚,拿到了吴恩达@斯坦福大学的机器学习课程证书
- 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?
- 【web審計-源碼泄露】獲取源碼方法,利用工具
- Monitoring web performance with performance
- How to learn to get the embedding matrix e # yyds dry goods inventory #
- glibc strlen 实现方式分析
- 请问一下我的请求是条件更新,但在buffer中就被拦截了,这种情况我只能每次去flush缓存么?
- KVM virtualization
猜你喜欢
New interesting test applet source code_ Test available
SQL injection exercise -- sqli Labs
[learning notes] month end operation -gr/ir reorganization
一文带你了解BI的前世今身与企业数字化转型的关系
Mongodb common commands
How about programmers' eyesight| Daily anecdotes
Basic function learning 02
Talk about the SQL server version of DTM sub transaction barrier function
【web源码-代码审计方法】审计技巧及审计工具
Subversive cognition: what does SRE do?
随机推荐
Share the newly released web application development framework based on blazor Technology
[groovy] string (string splicing | multi line string)
Quick start of UI component development of phantom engine [umg/slate]
C # use awaiter
【web源码-代码审计方法】审计技巧及审计工具
Is there any way to change the height of the uinavigationbar in the storyboard without using the UINavigationController?
v-if VS v-show 2.0
glibc strlen 实现方式分析
天干地支纪年法中为什么是60年一个轮回,而不是120年
Technology sharing swift defense programming
SQL performance optimization skills
001 chip test
Binary heap implementation (priority queue implementation)
Cette ADB MySQL prend - elle en charge SQL Server?
[2022 repair version] community scanning code into group activity code to drain the complete operation source code / connect the contract free payment interface / promote the normal binding of subordi
Redis6-01nosql database
040. (2.9) relieved
@Transactional 注解导致跨库查询失效的问题
Assembly - getting started
De debugging (set the main thread as hidden debugging to destroy the debugging Channel & debugger detection)