当前位置: 首页 > news >正文

[测试]Selenium自动化测试常用函数

文章目录

      • 1. 元素定位
        • 1.1 cssSelector
        • 1.2 xpath
      • 2. 操作测试对象
        • 2.1 点击/提交对象
        • 2.2 模拟按键输入
        • 2.3 清除文本内容
        • 2.4 获取文本信息
        • 2.5 获取当前页面标题
        • 2.6 获取当前页面URL
      • 3. 窗口
        • 3.1 切换窗口
        • 3.2 窗口设置大小
        • 3.3 屏幕截图
      • 4. 等待
        • 4.1 强制等待
        • 4.2 隐式等待
        • 4.3 显式等待
      • 5. 浏览器导航
      • 6. 弹窗
        • 6.1 警告弹窗 + 确认弹窗
        • 6.2 提示弹窗
      • 7. 文件上传
      • 8. 浏览器参数设置
        • 8.1 设置无头模式
        • 8.2 设置浏览器加载策略

1. 元素定位

Web自动化测试的核心是能够找到页面对应的元素,然后才能对元素进行具体的操作。常见的元素定位方式包括 idclassnametagnamexpathcssSelector 等。最常用的是 cssSelectorxpath

1.1 cssSelector

选择器的功能是选中页面中指定的标签元素。选择器分为基础选择器和复合选择器,常见的元素定位方式可以通过 id 选择器和子类选择器来进行定位。

示例:
在这里插入图片描述

  • 定位百度首页的“百度热搜”元素:#s-hotsearch-wrapper > div > a.hot-title > div
  • 搜索输入框元素:#kw
  • 百度一下按钮:#su
1.2 xpath

XPath(XML路径语言)不仅可以在XML文件中查找信息,还可以在HTML中选取节点。XPath使用路径表达式来选择XML文档中的节点。

XPath语法:

  1. 获取HTML页面所有的节点://*
  2. 获取HTML页面指定的节点://[指定节点]
    • 获取所有 ui 节点://ui
    • 获取所有 input 节点://input
  3. 获取一个节点中的直接子节点://span/input
  4. 获取一个节点的父节点://input/..
  5. 实现节点属性的匹配:[@...]
    • 匹配 id 属性为 kw 的节点://*[@id='kw']
  6. 使用指定索引的方式获取对应的节点内容:
    • 定位到第三个百度热搜标签://div/ui/li[3]

在这里插入图片描述

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

便捷生成 selector/xpath 的方式:

  • 右键选择元素,选择“Copy selector”或“Copy XPath”。

问题: 手动复制的 selector/xpath 表达式不一定满足唯一性要求,有时需要手动修改表达式。


2. 操作测试对象

获取到页面的元素后,接下来就是对元素进行操作。常见的操作包括点击、提交、输入、清除、获取文本等。

2.1 点击/提交对象

使用 click() 方法点击元素。

示例:

driver.findElement(By.cssSelector("#su")).click();
2.2 模拟按键输入

使用 sendKeys() 方法输入文本。

示例:

driver.findElement(By.cssSelector("#kw")).sendKeys("输入文字");
2.3 清除文本内容

使用 clear() 方法清除输入框中的文本。

示例:

driver.findElement(By.cssSelector("#kw")).sendKeys("我爱游戏");
driver.findElement(By.cssSelector("#kw")).clear();
driver.findElement(By.cssSelector("#kw")).sendKeys("我爱学习");
2.4 获取文本信息

使用 getText() 方法获取元素的文本内容。

示例:

String bdtext = driver.findElement(By.xpath("//*[@id='title-content']/span[1]")).getText();
System.out.println("打印的内容是:" + bdtext);

注意: getText() 用于获取元素的文本内容,而 getAttribute("属性名称") 用于获取元素的属性值。

2.5 获取当前页面标题

使用 getTitle() 方法获取当前页面的标题。

示例:

String title = driver.getTitle();
2.6 获取当前页面URL

使用 getCurrentUrl() 方法获取当前页面的URL。

示例:

String url = driver.getCurrentUrl();

3. 窗口

当打开一个新的页面后,获取到的 titleURL 仍然是前一个页面的。为了切换到新窗口,可以使用窗口句柄(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.equals(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 屏幕截图

屏幕截图可以记录自动化脚本运行时的错误场景。
屏幕截图方法需要额外导入包:

<dependency>
 <groupId>commons-io</groupId>
 <artifactId>commons-io</artifactId>
 <version>2.6</version>
 </dependency>

示例:

//简单版本
File srcfile = driver.getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(srcfile,new File("my.png"));

//⾼阶版本
List<String> times = getTime();
//⽣成的⽂件夹路径./src/test/autotest-2025-03-01/goodsbroser-20250301-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 隐式等待

隐式等待是一种智能等待,它规定在查找元素时,在指定时间内不断查找元素。如果找到则继续执行,否则超时报错。

示例:

driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));

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

4.3 显式等待

显式等待也是一种智能等待,它在指定超时时间范围内等待某个条件满足 后继续执行。
ExpectedConditions预定义方法的⼀些示例:

  • elementToBeClickable(By locator) ‒ 用于检查元素的期望是可见的并已启用,以便您可以单击它。
  • textToBe(Bylocator,String str) - 检查元素。
  • presenceOfElementLocated(Bylocator) ‒ 检查页面的 DOM 上是否存在元素。
  • urlToBe(java.lang.String url) ‒ 检查当前页面的 URL 是⼀个特定的 URL。

示例:

WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
boolean ispass = wait.until(ExpectedConditions.textToBe(By.cssSelector("#s-top-left > a:nth-child(1)"), "新闻"));
if (ispass) {
    System.out.println("测试通过");
} else {
    System.out.println("测试失败");
}

优点: 可以自定义等待条件,操作灵活。
缺点: 写法复杂。

注意: 不要混合使用隐式等待和显式等待,可能会导致不可预测的等待时间。


5. 浏览器导航

常见的浏览器导航操作包括打开网站、前进、后退、刷新等。

示例:

// 打开网站
driver.get("https://selenium.dev");

// 浏览器前进
driver.navigate().forward();

// 浏览器后退
driver.navigate().back();

// 刷新页面
driver.navigate().refresh();

6. 弹窗

弹窗是页面中无法直接定位的元素,可以使用 Selenium 提供的 Alert 接口处理。

6.1 警告弹窗 + 确认弹窗

在这里插入图片描述

示例:

Alert alert = driver.switchTo().alert();
alert.accept();  // 确认
alert.dismiss(); // 取消
6.2 提示弹窗

在这里插入图片描述

示例:

Alert alert = driver.switchTo().alert();
alert.sendKeys("hello");
alert.accept();

7. 文件上传

点击文件上传的场景下会弹窗系统窗口,进行文件的选择。
selenium无法识别非web的控件,上传文件窗口为系统自带,无法识别窗口元素
但可以通过 sendKeys() 方法上传文件。

示例:

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

8. 浏览器参数设置

8.1 设置无头模式

无头模式可以在不打开浏览器的情况下运行自动化脚本。

示例:

ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
ChromeDriver driver = new ChromeDriver(options);
driver.get("https://www.baidu.com");
driver.quit();
8.2 设置浏览器加载策略

在这里插入图片描述
默认加载策略为normal

示例:

options.setPageLoadStrategy(PageLoadStrategy.NONE);

相关文章:

  • Java基础编程练习第31题-String类和StringBuffer类
  • 什么是 slot-scope?怎么理解。
  • 平安养老险深圳分公司积极开展2025年“3·15”金融消费者权益保护教育宣传活动
  • 19.如何使用 pandas 处理大型 Excel 文件:并行读取工作表
  • Spark 中创建 DataFrame 的2种方式对比
  • 【统计学相关笔记】抽样基本定理的证明
  • Linux与深入HTTP序列化和反序列化
  • 【LeetCode】622、设计循环队列
  • LuaJIT 学习(4)—— FFI 语义
  • JavaScript进阶篇:二、 对象与面向对象编程
  • 组合Ⅲ 力扣216
  • 卫语句优化多层if else嵌套
  • Typora最新版破解教程
  • 最新版VMware 17.6.3安装包分享
  • 功耗电流和耗电量的获取
  • 大数据 spark hive 总结
  • react(一):特点-基本使用-JSX语法
  • 【大模型(LLMs)RAG 检索增强生成 面经】
  • 【HTML】二、列表、表格
  • 【JAVA】七、基础知识“if+switch+循环结构”详细讲解~简单易懂!
  • 新希望一季度归母净利润4.45亿,上年同期为-19.34亿
  • 浙商银行一季度净赚超59亿微增0.61%,非息净收入降逾22%
  • 深入贯彻中央八项规定精神学习教育中央指导组培训会议召开
  • 美财长称关税战升级的责任在中方,外交部:关税战、贸易战没有赢家
  • 卡尼领导的加拿大自由党在联邦众议院选举中获胜
  • 广西干旱程度有所缓解,未来一周旱情偏重地区降水量仍不足