用selenium4 webdriver + java 开发第一个自动化测试脚本
环境准备:
1.环境准备:
搜有资源可以从百度网盘下载链接:https://pan.baidu.com/s/17Yp3M-eCA429jv3A3KBCkA
提取码:1234
1)安装java环境,我的java version "1.8.0_241"
2)安装eclipse
3)下载selenium webdriver。其他版本可通过链接下载
4_selenium-server-4.jar
4)下载安装浏览器和浏览器驱动,注意浏览器驱动的类型和版本号需要和你计算机上的浏览器版本匹配。
chrome浏览器100版本:1_100.0.4896.127_chr.exe
chrome100版本浏览器对应的浏览器驱动:解压5_chromdriver100.0.1.zip文件夹,其下的chromedriver.exe是浏览器驱动
浏览器驱动器和浏览器通讯,向浏览器发出请求,接收响应。
不同浏览器有各自的浏览器驱动程序,以控制浏览器。浏览器驱动程序可以看做是代理。chrome、firefox、IE等浏览器都有自己的浏览器驱动程序。
根据你要自动化测试使用的浏览器及其版本,下载相应的浏览器驱动程序
需要注意的是,浏览器驱动程序需要和浏览器的版本相匹配。
各浏览器驱动下载路径如下图所示。选择浏览器后,点击【download】,在下载页面选择合适的版本即可。
Install browser drivers | Selenium ,该页面中部内容如下:
我使用的chrome浏览器,我的谷歌浏览器版本100.0.4896.127,所以下载的浏览器驱动是chromdriver100.0.1.zip,
chrome浏览器驱动下载路径:ChromeDriver Mirror
建议和我保持一致,以免版本匹配出现问题,节外生枝。
为了后续测试代码能顺利调用浏览器驱动,可以将下载chromedriver.exe 的路径添加到系统环境变量path中。
2.第一个selneium自动化测试脚本
1)在eclipse中创建java工程
-
2)将selenium的java依赖包加到工程中
工程中新建文件夹lib,将selenium 包放入文件夹,然后加入到编译路径
工程中新建文件夹,文件夹名随意,我起名为lib
然后将4_selenium-server-4.jar放到你刚才新建的文件夹下;
然后选中该jar文件,点击右键菜单 build path -> add to build path
如果referenced libraries中出现了selenium包,则说明编译路径添加成功了
-
3)工程中添加浏览器驱动文件(在系统环境变量path添加浏览器驱动的路径也行)
解压5_chromdriver100.0.1.zip后,文件夹下有个chromedriver.exe就是我们需要的浏览器驱动器、
创建resouce文件夹,将浏览器的驱动复制到该文件夹,方便后续使用(该步不做也可以)
-
4)新建类文件 test1.java,编写selenium代码,并运行
代码如下
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class Test1 {
public static void main(String[] args) throws InterruptedException {
System.setProperty("webdriver.chrome.driver","resource\\chromedriver.exe"); //设置chrome驱动程序的路径
System.out.println(System.getProperty("webdriver.chrome.driver"));
WebDriver driver = new ChromeDriver(); //初始化一个chrome驱动实例,保存到driver中
// WebDriver driver = = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); //隐式等待10秒
//最大化窗口
driver.manage().window().maximize(); //最大化窗口
//设置隐性等待时间
driver.get("https://www.runoob.com/html/html-tutorial.html");
Thread.sleep(30000); //等待页面加载完成,后续写代码注意,如果页面加载未完成,可能导致页面元素找不到
System.out.println("当前打开页面的标题是: "+ driver.getTitle());
//关闭并退出浏览器
driver.quit();
}
运行结果:
5)将junit框架引入到工程中
引入junit框架的方法:
选中项目,点击右键菜单 “Build path”,将junit库添加到libraries中
下面我们可以把之前的工程改为单元测试框架的测试代码奥
最终代码如下:
import java.util.concurrent.TimeUnit;
import org.junit.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class Test1 {
// public static void main(String[] args) throws InterruptedException {
@Test
public void cainiao() throws InterruptedException{
System.setProperty("webdriver.chrome.driver","resource\\chromedriver.exe"); //设置chrome驱动程序的路径
System.out.println(System.getProperty("webdriver.chrome.driver"));
WebDriver driver = new ChromeDriver(); //初始化一个chrome驱动实例,保存到driver中
// WebDriver driver = = new FirefoxDriver();
driver.manage().window().maximize(); //最大化窗口
//设置隐性等待时间
driver.get("https://www.runoob.com/html/html-tutorial.html");
Thread.sleep(3000); //等待页面加载完成,后续写代码注意,如果页面加载未完成,可能导致页面元素找不到
System.out.println("当前打开页面的标题是: "+ driver.getTitle());
//关闭并退出浏览器
driver.quit();
}
}
大家可以添加多个测试用例,用@Test注解的函数会被当做测试用例。
尝试写了个更复杂的例子,可能对新同学来说太难了,但是其实认真看看,也还是可以看懂的奥!
由于链接会打开新的页签,要在新的页面上操作的前提是先切换到那个页签,selenium切换稍微有一丢丢麻烦,这个就是套路留下来以后直接用就好了,这个是有点复杂的。
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.WindowType;
import org.openqa.selenium.chrome.ChromeDriver;
import junit.framework.Assert;
public class p2p {
@SuppressWarnings("deprecation")
@Test
void test01() throws InterruptedException {
//设置chrome驱动程序的路径
System.setProperty("webdriver.chrome.driver","resource\\chromedriver.exe");
System.out.println(System.getProperty("webdriver.chrome.driver"));//打印驱动器路径
//初始化一个chrome驱动实例,保存到driver中
WebDriver driver = new ChromeDriver();
//最大化窗口
driver.manage().window().maximize();
//打开指定url的页面
driver.get("https://www.runoob.com/html/html-tutorial.html");
//设置等待3s
Thread.sleep(3000);
//将浏览器窗口句柄保存到originalWindow(以便和后面链接打开的tab页区分)
String originalWindow = driver.getWindowHandle();
//找到页面上的id值为"s"的元素,保存到searchText
WebElement searchText = driver.findElement(By.id("s"));
//向该元素中输入:xpath换行符
searchText.sendKeys("xpath\n");
//循环查找直到找到新窗口
String secondWindow ="" ;
for (String windowHandle : driver.getWindowHandles()) {
if(!originalWindow.contentEquals(windowHandle)) {
driver.switchTo().window(windowHandle);
secondWindow=windowHandle;
break;
}
}
//打印页面标题
System.out.println("第二个打开页面的标题是: "+ driver.getTitle());
//点击链接文字
driver.findElement(By.partialLinkText("xpath")).click();
//循环查找直到找到新窗口
String thirdWindow = "";
for (String windowHandle : driver.getWindowHandles()) {
if(!originalWindow.contentEquals(windowHandle) && !secondWindow.contentEquals(windowHandle) ) {
driver.switchTo().window(windowHandle);
thirdWindow=windowHandle;
break;
}
}
//打印页面标题
System.out.println("当第三个页面的标题是: "+ driver.getTitle());
//使用junit的断言,检查打开页面的url地址是否符合预期
Assert.assertEquals("https://www.runoob.com/xpath/xpath-tutorial.html",driver.getCurrentUrl() );
Thread.sleep(3000);
//关闭并退出浏览器
driver.quit();
}
}
相关文章
- 深入java面向对象五:Java的内存管理
- 深入java面向对象四:Java 内部类种类及使用解析(转)
- [Java 基础] 使用java.util.zip包压缩和解压缩文件
- Jmeter里的全能java测试sampler - Java request
- java基础知识回顾之抽象类和接口的区别
- Java实现蓝桥杯日期问题
- Java -- JDBC 学习--PreparedStatement
- 【JAVA】毕向东Java基础视频教程-笔记
- Java监控工具介绍,VisualVm ,JProfiler,Perfino,Yourkit,Perf4J,JProbe,Java微基准测试
- Java数据库篇6——多表查询
- Atitit java webservice客户端v2 目录 1.1. 生成stub代码wsimport.exe1 1.2. Wsimport2 1.3. clienttest3 1.1
- 【java】Java中-> 是什么意思?
- 基于JAVA实现的WEB端UI自动化 - WebDriver高级篇 - grid [跨浏览器远程测试-可分布式]
- 基于JAVA实现的WEB端UI自动化 - WebDriver高级篇 - 获取测试对象状态
- 基于JAVA实现的WEB端UI自动化 -自动化测试简单介绍
- java 中的 ?: 埃尔维斯操作符
- 【JAVA】【NIO】5、Java NIO Scatter / Gather
- Java Scanner 类
- java - 详解 Java 17 中新推出的密封类
- 【java】Java线程池实现原理及业务中的实践
- 基于JAVA实现的WEB端UI自动化 -自动化测试简单介绍
- 基于JAVA实现的WEB端UI自动化 - WebDriver框架篇 - 内部框架及UI自动化测试框架思维导图
- JAVA开发讲义(二)-Java程序设计之数据之谜三