⾃动化测试常⽤函数

安装⾃动化流程请看上集

https://blog.csdn.net/2302_77623737/article/details/163372237?spm=1001.2014.3001.5501

1.元素的定位

web⾃动化测试的操作核⼼是能够找到⻚⾯对应的元素,然后才能对元素进⾏具体的操作。

常⻅的元素定位⽅式⾮常多,如id,classname,tagname,xpath,cssSelector

常⽤的主要由cssSelectorxpath

1.1 cssSelector

选择器的功能: 选中⻚⾯中指定的标签元素

选择器的种类分为基础选择器复合选择器 ,常⻅的元素定位⽅式可以通过id选择器和⼦类选择器来进⾏定位。

定位百度首页的"百度热搜"元素,可以使用通过id选择器和子类选择器进行定位:# s-hotsearch-wrapper > div > a.hot-title > div

"搜索输入框元素":# chat-textarea

"百度一下按钮":# chat-submit-button

1.2 xpath

XML路径语⾔,不仅可以在XML⽂件中查找信息,还可以在HTML中选取节点。

xpath使⽤路径表达式来选择xml⽂档中的节点

xpath语法中:

1.2.1 获取HTML⻚⾯所有的节点

复制代码
//*

"搜索输入框元素": //* @id="chat-textarea"

1.2.2 获取HTML⻚⾯指定的节点

复制代码
//[指定节点]

//ul :获取HTML⻚⾯所有的ul节点

//input:获取HTML⻚⾯所有的input节点

1.2.3 获取⼀个节点中的直接⼦节点

复制代码
/
//span/input

1.2.4 获取⼀个节点的⽗节点

复制代码
..
//input/.. 获取input节点的⽗节点

1.2.5 实现节点属性的匹配

复制代码
[@...]

//* @id="chat-textarea"匹配HTML⻚⾯中id属性为chat-textarea的节点

1.2.6 使⽤指定索引的⽅式获取对应的节点内容

注意:xpath的索引是从1开始的。

百度⾸⻚通过://* @id="hotsearch-content-wrapper"/li3/a/span2 定位到第三个百度热搜标签!

更便捷的生成selector/xpath的方式:右键选择复制"Copy selector/xpath"
注意:元素的定位方法必须唯一

2.操作测试对象

获取到了⻚⾯的元素之后,接下来就是要对元素进⾏操作了。常⻅的操作有点击、提交、输⼊、清

除、获取⽂本。

2.1 点击/提交对象

复制代码
click()

//找到百度⼀下按钮并点击

driver.findElement(By.xpath("//* @id="chat-submit-button"")).click();

2.2 模拟按键输⼊

复制代码
sendKeys("")

driver.findElement (By.xpath("//* [@id=\"chat-textarea\"]")).sendKeys ("输入文字");

2.3清除文本内容

输入文本后又想换一个新的关键词,这里就需要用到

clear()

driver.findElement (By.xpath("//* @id="chat-submit-button"")).sendKeys("我爱游戏");

driver.findElement(By.xpath("//* @id="chat-submit-button"")).clear();

driver.findElement (By.xpath("//* @id="chat-submit-button"")).sendKeys ("我爱学习");

2.4获取文本信息

如果判断获取到的元素对应的文本是否符合预期呢?获取元素对应的文本并打印一下~~

获取文本信息:

getText()

String bdtext = driver.findElement(By.xpath("//* @id="title-content"/span1")).getText();

System.out.println("打印的内容是:"+bdtext);

2.5 获取当前⻚⾯标题

复制代码
getTitle()

2.6获取当前⻚⾯URL

复制代码
getCurrentUrl()

3.窗⼝

打开⼀个新的⻚⾯之后获取到的title和URL仍然还是前⼀个⻚⾯的?

当我们⼿⼯测试的时候,我们可以通过眼睛来判断当前的窗⼝是什么,但对于程序来说它是不知道当前最新的窗⼝应该是哪⼀个。对于程序来说它怎么来识别每⼀个窗⼝呢?每个浏览器窗⼝都有⼀个唯⼀的属性句柄(handle) 来表⽰,我们就可以通过句柄来切换.

3.1 切换窗⼝

1)获取当前⻚⾯句柄:

driver.getWindowHandle();

2)获取所有⻚⾯句柄:

driver.getWindowHandles()

3)切换当前句柄为最新⻚⾯:

复制代码
String curWindow = driver.getWindowHandle();
Set<String> allWindow = driver.getWindowHandles();
for( String w:allWindow){

	if(w!=curWindow){
		driver.switchTo().window(w);
	}
}

注意:执行了driver.close()之前需要切换到未被关闭的窗口

3.2窗口设置大小

复制代码
//窗口最大化
driver.manage().window().maximize();
//窗口最小化
driver.manage().window().minimize();
/全屏窗口
driver.manage().window().fullscreen();
//手动设置窗口大小
driver.manage().window().setSize (new Dimension(1024, 768));

3.3 窗⼝切换

复制代码
//获取所有句柄
//获取当前停留⻚⾯句柄
String curWindow = driver.getWindowHandle();
Set<String> allWindow = driver.getWindowHandles();
for( String w : allWindow){
	 if(w!=curWindow){
	 driver.switchTo().window(w);
	 }
}

3.4 屏幕截图

我们的⾃动化脚本⼀般部署在机器上⾃动的去运⾏,如果出现了报错,我们是不知道的,可以通过抓拍来记录当时的错误场景

屏幕截图⽅法需要额外导⼊包:

复制代码
<dependency>
	<groupId>commons-io</groupId>
	<artifactId>commons-io</artifactId>
	<version>2.6</version>
</dependency>

File file = ((TakesScreenshot)webDriver).getScreenshotAs(outputType. FILE);
FileUtils.copyFile(file,new File(filename));

代码演示:

复制代码
//简单版本
File srcfile = driver.getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(srcfile,new File("my.png"));
//⾼阶版本
List<String> times = getTime();
//⽣成的⽂件夹路径./src/test/autotest-2026-08-01/goodsbroser-20260801-214130.png
String filename ="./src/test/autotest-"+times.get(0)+"/"+str+"-
"+times.get(1)+".png";
File srcfile = driver.getScreenshotAs(OutputType.FILE);
//把屏幕截图放到指定的路径下
FileUtils.copyFile(srcfile,new File(filename));

3.5关闭窗⼝

driver.close();

注意:窗⼝关闭后driver要重新定义

4、等待

通常代码执⾏的速度⽐⻚⾯渲染的速度要快,如果避免因为渲染过慢出现的⾃动化误报的问题呢?可以使⽤selenium中提供的三种等待⽅法:

4.1 强制等待

复制代码
Thread.sleep()

优点:使⽤简单,调试的时候⽐较有效

缺点:影响运⾏效率,浪费⼤量的时间

4.2隐式等待

隐式等待是一种智能等待,他可以规定在查找元素时,在指定时间内不断查找元素。如果找到则代码继续执行,直到超时没找到元素才会报错。

implicitlyWait()

yyyy-MM-dd HH:mm:ss后面的时分秒是24小时制
yyyy-MM-dd hh:mm:ss后面的时分秒是12小时制

复制代码
//隐式等待1000毫秒
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(1000));
//隐式等待5秒
driver.manage().timeouts ().implicitlyWait(Duration.ofSeconds(5));

隐式等待作⽤域是整个脚本的所有元素。即只要driver对象没有被释放掉(driver.quit()),隐式等待就⼀直⽣效。优点:智能等待,作⽤于全局

4.3 显⽰等待

显⽰等待也是⼀种智能等待,在指定超时时间范围内只要满⾜操作的条件就会继续执⾏后续代码

new WebDriverWait(driver, Duration.ofSeconds(3)).until($express)

$press:涉及到selenium.support.ui.ExpectedConditions包下的ExpectedConditions类

返回值:boolean

复制代码
WebDriverWait foo = new WebDriverWait(driver, Duration.ofSeconds(3))
foo.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#id")));

5.浏览器导航

常⻅操作:

1)打开⽹站

// 更⻓的⽅法

driver.navigate().to("https://selenium.dev");

// 简洁的⽅法

driver.get("https://selenium.dev");

2)浏览器的前进、后退、刷新

复制代码
 driver.navigate().back();
 driver.navigate().forward();
 driver.navigate().refresh();

6.弹窗

6.1警告弹窗+确认弹窗

复制代码
Alert alert = driver.switchTo.alert();
//确认
alert.accept()
//取消
alert.dismiss()

6.2提示弹窗

复制代码
Alert alert = driver.switchTo.alert();
alert.sendKeys("hello");
alert.accept();
alert.dismiss();

7.文件上传

点击文件上传的场景下会弹窗系统窗口,进行文件的选择。

selenium无法识别非web的控件,上传文件窗口为系统自带,无法识别窗口元素

但是可以使用sendkeys来上传指定路径的文件,达到的效果是一样的

复制代码
input[type=file]"));
WebElement ele = driver.findElement(By.cssSelector("body > div > div >
ele.sendKeys("D: \\selenium2html\\selenium2html\\upload.html");

8.浏览器参数设置

1)设置⽆头模式

!\[Pasted image 20260731171501.png]

默认情况是有头的

相关推荐
疯狂打码的少年1 小时前
【面向对象】UML概述(基本构造块:事物/关系/图)
java
一水2 小时前
TTFT优化:一个方案的5次推倒重来
java·ai·状态模式
AC赳赳老秦2 小时前
CSDN 技术社区数据采集:OpenClaw 抓取公开技术热帖,生成领域技术热点周报
java·大数据·前端·数据库·python·php·openclaw
磁爆步兵2 小时前
内存分区:程序运行的核心秘密
java·开发语言·jvm
流星白龙3 小时前
【Docker】4.NameSpace空间隔离实战
java·运维·docker
AI人工智能+电脑小能手3 小时前
【大白话说Java面试题 第207题】【09_Zookeeper篇】第8题:谈谈 ZooKeeper 的可靠性保障机制
java·zookeeper·高可用·可靠性·分布式系统
harmful_sheep3 小时前
maven多版本包导致java.lang.NoClassDefFoundError
java·maven
Mark_ZP3 小时前
【锁2】锁的分类与概念
java·
caishenzhibiao4 小时前
顺势捕猎者副图 同花顺期货通指标
java·c语言·c#