自动化测试常用函数(Java方向)

news2024/11/13 9:49:20

目录

一、元素的定位

1.1 cssSelector

1.2 xpath

1.2.1 获取HTML页面所有的节点

1.2.2 获取HTML页面指定的节点

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

1.2.4 获取⼀个节点的父节点

1.2.5 实现节点属性的匹配

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

二、操作测试对象

2.1 点击/提交对象

2.2 模拟按键输入

2.3 清除文本内容

2.4 获取文本信息

2.5 获取当前页面标题

2.6获取当前页面URL

三、窗口

3.1 切换窗口

3.2 窗口的大小设置

3.3 关闭窗口

3.4 屏幕截图

 四、等待

4.1 强制等待

4.2 隐式等待

4.3 显示等待

五、浏览器导航

5.1 打开网站

5.2 浏览器的前进、后退、刷新

六、弹窗

6.1 警告弹窗+确认弹窗

6.2 提示弹窗

七、文件上传

八、浏览器参数设置

8.1 设置无头模式

8.2 设置浏览器加载策略


一、元素的定位

web自动化测试的操作核心是能够找到页面对应的元素,然后才能对元素进行具体的操作。
常见的元素定位方式非常多,如id,classname,tagname,xpath,cssSelector。常用的主要由cssSelector和xpath。

1.1 cssSelector

选择器的功能:选中页面中指定的标签元素。
选择器的种类分为基础选择器和复合选择器,常见的元素定位方式可以通过id选择器和子类选择器来进行定位。
定位百度首页的“百度热搜”元素,可以使用通过id选择器和子类选择器进行定位:#s-hotsearch-
wrapper > div
“搜索输入框元素”:#kw
“百度一下按钮”:#su

1.2 xpath

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

xpath语法中:

1.2.1 获取HTML页面所有的节点

//*

1.2.2 获取HTML页面指定的节点

//[指定节点]
//ul :获取HTML页面所有的ul节点
//input:获取HTML页面所有的input节点

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

/
//span/input

1.2.4 获取⼀个节点的父节点

..
//input/..  获取input节点的父节点

1.2.5 实现节点属性的匹配

[@...]
//*[@id='kw']  匹配HTML页面中id属性为kw的节点

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

注意:xpath的索引是从1开始的。
百度首页通过://div/ul/li[3] 定位到第三个百度热搜标签
更便捷的生成selector/xpath的方式:右键选择复制"Copy selector/xpath"
注意:元素的定位方法必须唯一。

二、操作测试对象

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

2.1 点击/提交对象

click()

//找到百度一下按钮并点击
driver.findElement(By.cssSelector("#su")).click();

页面大部分可以点击,但也有一部分,例如页面隐藏的标签、不可见的标签就不能点击(带有hidden的标签)。运行会报“ElementNotInteractableException”错误。

2.2 模拟按键输入

sendKeys(""): 输入框可以接收的内容都可以输入。
driver.findElement(By.cssSelector("#kw")).sendKeys("输入⽂字");

2.3 清除文本内容

clear()
输入文本后又想换一个新的关键词,这需要用到 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);

获取属性值:getAttribute(参数)

如下为属性值信息:
String bdtext = driver.findElement(By.cssSelector("#su")).getAttribute(name:"value");
System.out.println("百度一下按钮上的文字为:"+bdtext);

2.5 获取当前页面标题

getTitle()
String title= driver.getTitle();
System.out.println("title:"+ title);

2.6获取当前页面URL

getCurrentUrl()
String url= driver.getCurrentUrl();
System.out.println("url:"+ url);

三、窗口

对于程序来说它怎么来识别每一个窗口呢?每个浏览器窗口都有一个唯一的属性句柄(handle)来表示,那么就可以通过句柄来切换。

3.1 切换窗口

  • 获取当前页面句柄: driver.getWindowHandle();
  • 获取所有页面句柄: driver.getWindowHandles()
  • 切换当前句柄为最新页面:
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 关闭窗口

注意:窗口关闭后driver 要重新定义
//关闭当前标签页
driver.close();

driver.close()表示关闭当前标签页,driver.quit()表示关闭浏览器或者释放driver对象。

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-2024-08-01/goodsbroser-20240801-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));

 四、等待

通常代码执行的速度比页面渲染的速度要快,如果避免因为渲染过慢出现的自动化误报的问题呢?可以使用selenium中提供的三种等待方法:

4.1 强制等待

Thread.sleep()
优点:使用简单,调试的时候比较有效,直接阻塞程序。
缺点:影响运行效率,浪费大量的时间。假如测试用例过多,那么测试时间太长。

4.2 隐式等待

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

implicitlyWait()  参数:Duration类中提供的毫秒、秒、分钟等方法

//隐式等待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")));
ExpectedConditions预定义方法的一些示例:
  • elementToBeClickable(By locator) : 用于检查元素的期望是可见的并已启⽤,以便单击它。
  • textToBe(BylocatorString 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-topleft > a:nth-child(1)"), "新闻"));
  if(ispass){
    System.out.println("测试通过");
  }else {
    System.out.println("测试失败");
}

优点:显示等待是智能等待,可以自定义显示等待的条件,操作灵活。
缺点:写法复杂。

五、浏览器导航

5.1 打开网站

// 更⻓的⽅法
driver.navigate().to("https://selenium.dev");
// 简洁的⽅法
driver.get("https://selenium.dev");

5.2 浏览器的前进、后退、刷新

driver.navigate().back();
driver.navigate().forward();
driver.navigate().refresh();

六、弹窗

弹窗是在页面是找不到任何元素的,这种情况使用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();
alert.dismiss();

七、文件上传

点击文件上传的场景下会弹窗系统窗口,进行文件的选择。 selenium无法识别非web的控件,上传⽂件窗口为系统自带,无法识别窗口元素,但是可以使用sendkeys来上传指定路径的文件,达到的效果是⼀样的。
WebElement ele = driver.findElement(By.cssSelector("body > div > div > input[type=file]"));
ele.sendKeys("D:\\selenium2html\\selenium2html\\upload.html");

八、浏览器参数设置

8.1 设置无头模式

默认情况下是有头模式,无头模式需要手动设置一下。有头模式指的是自动化运行的时候,过程以浏览器的窗口形式运行,而无头模式不显示自动化过程,只显示结果。

ChromeOptions options = new Chrome0ptions();
options.addArguments("-headless");

ChromeDriver driver = new ChromeDriver(options);
driver.get("https://www.baidu.com");

driver.quit();

8.2 设置浏览器加载策略

//三种策略
options.setPageLoadStrategy(PageLoadStrategy.normal);
options.setPageLoadStrategy(PageLoadStrategy.eager);
options.setPageLoadStrategy(PageLoadStrategy.NONE);

通常情况下不需要设置浏览器加载策略,只有在极端情况下,页面元素可见,但页面还在加载资源的情况下才会使用。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1969996.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

麒麟系统如何删除光盘刻录痕迹??

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

一文解读ReentrantLock

本期说一下ReentrantLock的相关面试题。 Lock接口 是JDK层面锁 悲观锁 可重入锁。&#xff08;可重入锁&#xff08;Reentrant Lock&#xff09;是一种支持线程重复获取锁的锁机制。当一个线程已经获得了可重入锁后&#xff0c;它可以再次请求该锁而不会被阻塞&#xff0c;这就…

第G6周:CycleGAN实战

本文为365天深度学习训练营 中的学习记录博客 原作者&#xff1a;K同学啊 可参考论文&#xff1a;《Unpaired Image-to-Image Translation》 1、CycleGAN 能做什么&#xff1f; CycleGAN的一个重要应用领域是Domain Adaptation&#xff08;域迁移&#xff1a;可以通俗的理解为…

Stable Diffusion 使用详解(5)---- 光影效果与场景融入

目录 背景 底模选取 提示词 ControlNet openpose illumination 效果 背景 有一家服装品牌店&#xff0c;需要绘制一款模特穿着某个英文LOG的漂亮服装&#xff0c;这是一种很常见UI作画需求&#xff0c;这类需求实际上可以透过选取正确的底模 controlNet 进行完美的实现…

vite vue3 Webstorm multiple export width the same name “default“

系统格式不一样&#xff0c;导致代码文件格式冲突导致的&#xff0c;解决方法找到对应的文件&#xff0c;将文件类型切换成LF。

软件测试--兼容性测试

兼容性测试综述 软件兼容性测试是指检查软件之间是否能够正确的交互和共享信息 交互可以同时运行于同一台计算机上的两个程序之间&#xff0c;甚至在相隔几千公里通过因特网连接的不同计算机上的两个程序之间进行。还可以离线介质如导出到介质然后导入到其他计算机的其他软件…

2024年最新护眼台灯攻略:孩视宝、飞利浦和书客护眼台灯哪个好

在当今数字时代&#xff0c;无论是工作还是学习&#xff0c;长时间面对电子屏幕已成为日常。这对眼睛健康提出了挑战&#xff0c;尤其是对于成长中的孩子&#xff0c;正确的照明环境对保护视力至关重要。因此&#xff0c;选择一款高质量的护眼台灯成为了许多家庭的刚需。 如今…

OPenCV高级编程——OPenCV形态学之腐蚀、膨胀、开运算、闭运算、形态学梯度等详解

目录 引言 形态学基础 结构元素&#xff08;Structuring Element&#xff09; 基本形态学操作 腐蚀&#xff08;Erosion&#xff09; 膨胀&#xff08;Dilation&#xff09; 开运算&#xff08;Opening&#xff09; 闭运算&#xff08;Closing&#xff09; 高级形态学…

读零信任网络:在不可信网络中构建安全系统06授权

1. 授权 1.1. 授权决策不容忽视&#xff0c;所有访问请求都必须被授权 1.2. 数据存储系统和其他各支撑子系统是授权的基石 1.2.1. 子系统提供访问控制的权威数据源和评估依据&#xff0c;直接影响授权决策 1.2.2. 谨慎区分各子系统的职责和能力&#xff0c;需要将其严格隔离…

高数经典反例记录(持续更新)

这篇博客总结了一些易混淆的概念以及经典反例&#xff0c;全部看完会有收获的&#xff0c;后期可能会继续补充&#xff01; 1.概念模糊 2.极限存在/不存在问题

豹5全新价格引爆市场,技术平权开启SUV新篇章

关注汽车市场的小伙伴&#xff0c;想必都知道最近方程豹品牌的豹5车型&#xff0c;打出了23.98万元至30.28万元的全新价格区间&#xff0c;重新定义了SUV市场的竞争格局。 方程豹的这一举动&#xff0c;立刻引发了市场的热烈讨论&#xff1a;“豹5现在值得入手吗&#xff1f;”…

科普文: jdk 1.7和 jdk 1.8 中ConcurrentHashMap 原理浅析

1. 前言 为什么要使用 ConcurrentHashMap 主要基于两个原因&#xff1a; 在并发编程中使用 HashMap 可能造成死循环(jdk1.7,jdk1.8 中会造成数据丢失)HashTable 效率非常低下 2. ConcurrentHashMap 结构 jdk 1.7 和 jdk 1.8 中&#xff0c;ConcurrentHashMap 的结构有着很…

软件产品测试报告包括哪些内容?专业软件测试服务供应商推荐

在当今快速发展的软件行业中&#xff0c;软件产品测试报告的重要性愈加凸显。卓码软件测评作为专业的软件测试服务供应商&#xff0c;深知一份高质量的测试报告对于开发团队、管理层以及客户的重要性。 软件产品测试报告是对软件产品在测试过程中所表现出来的各项指标和特性的…

【架构师进阶必备】Spring - 运行时以四种方式动态注册 bean

Spring — 运行时以四种方式动态注册 bean 1. 概述 在本教程中&#xff0c;我们将学习“使用 spring 动态注册 bean”或“在运行时动态将 bean 添加到 spring-context”。在Spring 应用程序中加载和删除 bean 时&#xff0c;无需在运行时重新启动应用程序即可完成此操作。 如…

先用先发!小样本故障诊断新思路!Transformer-SVM组合模型多特征分类预测/故障诊断(Matlab)

先用先发&#xff01;小样本故障诊断新思路&#xff01;Transformer-SVM组合模型多特征分类预测/故障诊断&#xff08;Matlab&#xff09; 目录 先用先发&#xff01;小样本故障诊断新思路&#xff01;Transformer-SVM组合模型多特征分类预测/故障诊断&#xff08;Matlab&#…

【RabbitMQ】路由模式(Routing)

一、基本概念 生产者&#xff08;Producer&#xff09;&#xff1a;发送消息到交换机的程序。在发送消息时&#xff0c;需要指定一个路由键。交换机&#xff08;Exchange&#xff09;&#xff1a;接收生产者发送的消息&#xff0c;并根据路由键将消息路由到与之匹配的队列。在…

【C++BFS】1466. 重新规划路线

本文涉及知识点 CBFS算法 LeetCode1466. 重新规划路线 n 座城市&#xff0c;从 0 到 n-1 编号&#xff0c;其间共有 n-1 条路线。因此&#xff0c;要想在两座不同城市之间旅行只有唯一一条路线可供选择&#xff08;路线网形成一颗树&#xff09;。去年&#xff0c;交通运输部…

软件测试--易用性测试

人体工程学这是一门将日常使用的东西设计为易于使用何实用性强的科学。因此人体工程学的主要目标是达到易用性。 用户界面测试 用于与软件程序交互的方式称为用户界面或UI。大家都熟悉的计算机UI随着时间推移发生了变化。早期的计算机有触发开关和发光管。纸带、穿孔卡和电传打…

AIGC技术的未来航向:深度解析与Java实践

摘要&#xff1a; 本文深入探讨了人工智能生成内容&#xff08;AIGC&#xff09;技术的未来发展方向&#xff0c;从技术创新、可持续可拓展性、用户体验、应用场景、政府赋能等多维度进行分析&#xff0c;并结合Java技术实践&#xff0c;提供具体的实现策略和代码示例。 引言…

PDF翻译神器:这四款可以实现一键搞定,留学党必备!

外文的阅读还是需要一定的语言功底&#xff0c;现在大家也对外文越来越重视起来了&#xff0c;但是借助一些翻译工具进行翻译可以很大程度地提升工作的效率&#xff0c;就算是遇到批量的文件处理也可以一键翻译出来&#xff0c;所以今天借此文章整理了四款好用的pdf翻译工具&am…