1.引言
前两天有朋友过来问,说团队测试人员工作负荷太高了,人手不够,从技术维度上有没有什么解决方案?我给推荐了Selenium,做自动化测试吧。即便前期有一定投入成本,考虑到后续收益是可以接受的。
那么今天这篇文章,我顺带分享关于Selenium的入门级操作,通过一篇文章搞清楚Selenium是什么,以及可以做什么。
Selenium官方地址:www.selenium.dev/documentati…
根据官方文档介绍,我们看到Selenium是一个浏览器自动化操作项目,或者更直白一些它是Web应用自动化测试工具套件
- 支持语言丰富:java,python,c#,ruby,javaScript,kotlin
- 支持主流浏览器:chrome,firefox,edge,safari
- 跨平台:windows,linux,macos
你看到了,不管是什么操作系统平台,不管是你喜欢什么浏览器,都满足!那么在以下实际应用场景中,Selenium都给我们带来了工程实践价值:
- 自动化测试,降本增效
- 爬虫,模拟各种浏览器操作,什么繁琐逆向js,验证码,动态请求分析,都不需要!
2.案例
2.1.环境准备
使用selenium操作浏览器,需要配套下载目标浏览器的驱动,selenium本质上是浏览器工具集套件,真正驱动浏览器的是驱动。
以下是三大主流浏览器驱动下载地址:
- chrome:developer.chrome.com/docs/chrome…
- firefox:github.com/mozilla/gec…
- edge:developer.microsoft.com/en-us/micro…
我们根据浏览器版本,下载相应的驱动版本,我这里以chrome浏览器为示例。
我的chrome浏览器版本:
插件相应版本:
本地存放路径:
2.2.java入门示例
2.2.1.应用需求
我这里的示例应用需求,访问百度:www.baidu.com网站,找到输入框,输入搜索关键词:Selenium,然后执行百度搜索,并提取搜索结果,通过断言判断实现一个最简单的自动化测试用例。
2.2.2.创建项目,添加依赖
项目结构是标准springboot应用,maven构建工具管理依赖:
selenium maven依赖:
pom.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<!--父级项目-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.edu.selenium</groupId>
<artifactId>edu-selenium</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>
2.2.3.脚本代码
代码中我配套写了详细的注释,都比较简单,相信做过java开发的朋友看起来不会有什么困难。
package cn.edu.selenium.hello;
import lombok.extern.slf4j.Slf4j;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;
@Slf4j
public class HelloSelenium {
public static void main(String[] args) {
//System.setProperty("webdriver.chrome.driver", "D:\\03other\\pycharmProjects\\chromedriver-win64\\chromedriver.exe");
System.setProperty("webdriver.chrome.driver", "D:\\03other\\pycharmProjects\\chromedriver-win64\\chromedriver-win64\\chromedriver.exe");
//初始化一个chrome浏览器实例,实例名称叫driver
WebDriver driver = new ChromeDriver();
//最大化窗口
driver.manage().window().maximize();
//设置隐性等待时间
driver.manage().timeouts().implicitlyWait(8, TimeUnit.SECONDS);
// get()打开一个站点
driver.get("https://www.baidu.com");
//判断title是不是 百度一下,你就知道
try{
String baidu_title = "百度一下,你就知道";
assert baidu_title.equals(driver.getTitle());
log.info("Test Pass");
}catch(Exception e){
e.printStackTrace();
}
//搜索输入框输入Selenium
driver.findElement(By.id("kw")).sendKeys("Selenium");
//点击百度一下按钮
driver.findElement(By.id("su")).click();
//设置隐性等待时间
driver.manage().timeouts().implicitlyWait(8, TimeUnit.SECONDS);
// 这里通过元素XPath表达式来确定该元素显示在结果列表,从而判断Selenium官网这个链接显示在结果列表。
WebElement ele_string=driver.findElement(By.xpath("//*[@id=\"9\"]/div[1]/div[1]/div[1]/h3/a/em"));
String ele_string1 = ele_string.getText();
log.info(ele_string1);
try{
if(ele_string1.equals("Selenium")){
log.info("Testing is successful!");
}
}catch(Exception e){
e.printStackTrace();
}
//关闭并退出浏览器
driver.quit();
}
}
2.2.4.浏览器自动操作
2.2.5.控制台输出
2.3.python入门示例
2.3.1.安装selenium库
使用python操作selenium,需要安装selenium库
pip install selenium==4.6.1
2.3.2.脚本代码
代码与java版本整体一致,仅仅是不同语言版本api方法上的差异,看起来都比较简单。
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
if __name__ == '__main__':
driverPath = "D:/03other/pycharmProjects/chromedriver-win64/chromedriver-win64/chromedriver.exe"
browser = webdriver.Chrome(driverPath)
# 最大化窗口
browser.maximize_window()
# 设置隐性等待时间
time.sleep(5)
# get()打开一个站点
browser.get("https://www.baidu.com")
try:
# 判断title是不是 百度一下,你就知道
baidu_title = "百度一下,你就知道"
assert baidu_title==browser.title
print("Test Pass: " + browser.title)
except Exception as e:
print(e)
# 搜索输入框输入Selenium
browser.find_element(By.ID,"kw").send_keys("Selenium")
# 点击百度一下按钮
browser.find_element(By.ID,"su").click()
# 设置隐性等待时间
time.sleep(8)
# 这里通过元素XPath表达式来确定该元素显示在结果列表,从而判断Selenium官网这个链接显示在结果列表。
ele_string = browser.find_element(By.XPATH,"//*[@id=\"9\"]/div[1]/div[1]/div[1]/h3/a/em")
ele_string1 = ele_string.text
print(ele_string1)
try:
if ele_string1=="Selenium":
print("Testing is successful!")
except Exception as e:
print(e)
# 关闭并退出浏览器
browser.quit()
2.3.3.执行结果
浏览器:
控制台: