web自动化测试

发布于:2025-09-07 ⋅ 阅读:(24) ⋅ 点赞:(0)

自动化主要是进行回归测试,就是检测对程序代码进行修改后是否带来了新的问题 ,以前通过的用例现在是否还能通过。软件版本更迭的速度挺快,自动化测试可以一定程度的减少测试人员的工作量,自动进行这些重复的测试工作,但是不能取代人工测试,因为自动化测试代码由人工编写维护,也不是一定能比人工测试更可靠。

分类

接口自动化测试:编写脚本或使用工具对API进行测试,比web测试更早发现底层的问题;

UI自动化测试(界面测试):包含web自动化测试(浏览器界面),移动端测试(部署在手机上的程序),后端底层代码的缺陷可以通过界面显示;

后面主要介绍web自动化测试;

web自动化测试

驱动

web测试首先要打开浏览器页面,要想程序自动打开,需要安装浏览器的驱动。驱动是一类特殊的软件,是操作体系和硬件设备的桥梁。计算机有了驱动就可以与设备(耳机,摄像头,键盘,麦克风)进行通信。

驱动管理

不同类型不同版本的浏览器的驱动都不同,同一浏览器版本更迭也快,如果手动管理版本的话人会很崩溃,所以就需要版本管理器。

添加依赖

<dependency>
 <groupId>io.github.bonigarcia</groupId>
 <artifactId>webdrivermanager</artifactId>
 <version>5.8.0</version>
 <scope>test</scope>
</dependency>

WebDriverManager是一个开源java库,以完全自动化的方式对Selenium  WebDriver所需的驱动程序(如chromedriver,geckodriver, msedgedriver等)进行管理(下载,设置,维护),版本5开始,WebDriverManager还提供了其他功能,如发现本地系统中安装浏览器的能力,构键WebDriver对象。

创建驱动对象

WebDriverManager.chromedriver().setup(); //启动谷歌浏览器驱动的版本管理器
ChromeOptions options = new ChromeOptions();  //创建谷歌浏览器配置对象  
options.addArguments("--remote-allow-origins=*", "-headless");//配置参数
WebDriver driver = new ChromeDriver(options);//创建驱动对象
            

下面用driver表示驱动对象;

Selenium

Selenium 是 编写web自动化测试脚本的工具,提供了许多方法供开发者使用。

添加依赖
<dependency>
 <groupId>org.seleniumhq.selenium</groupId>
 <artifactId>selenium-java</artifactId>
 <version>4.6.0</version>
</dependency>
元素定位

web自动化测试的核心操作是能找到页面对应的元素,然后才能对元素进行具体的操作,常见元素定位的方式很多,但常用的是cssSelector和xpath;

cssSelector
选择器:选择页面中的指定标签元素,常见元素定位方式可通过id选择器和子类选择器来进行定位;
定位百度首页的“百度热搜”:
打开开发者工具:F12  或者 右键 点击 检查;
百度热搜的位置:#s-hotsearch-wrapper > div > a.hot-title > div > i.c-icon.hot-title-icon
找百度热搜列表的元素:
li:nth-child(2)就表示这个列表的第二行;搜索框是用路径来锁定元素代码位置的;
用选择器还可以得到:
“搜索输输框元素”:#kw;
“百度一下按钮”:#su;
xpath

XML路径语言,不仅可以在XML文件中查找信息,还可以在HTML中选取节点,xpath使用路径表达式来选择xml文件中的节点;生成xpath的方式:同selector一样,只是右键选择复制"Copy xpath";

//*:获取HTML页面中的所有节点;

//ul :获取HTML页面欧阳ul节点;

//input:获取HTML页面所以input节点;

//input/..:获取input 节点上一级;

//*[@id='kw'] 匹配HTML页面中id属性为kw的节点;
 [@...]:实现节点属性的匹配
xpath的索引是从1开始的,百度首页通过://div/ul/li[3] 定位到第三个百度热搜标签;

常用函数

操作测试对象
click();  点击按钮,但不能点击隐藏的元素,只能点击页面可见元素;
sendKeys(" ");  输入框输入,一个输入框连续调用函数输入,会拼接在原有信息后面;
clear();清空当前输入框的信息
获取信息
getText();获取文本信息
getAttribute();获取页面标签属性名称
getTitle();获取当前页面标题
getCurrentUrl();获取当前页面URL
窗口

driver.close(); 关闭窗口,执行driver.close()之前需要切换到没有被关闭的窗口;

driver.quit();关闭所有页面窗口,关闭浏览器驱动程序进程;

driver.manage().window().maximize(); 窗口最大化

driver.getWindowHandle(); 获取当前页面句柄

driver.getWindowHandles(); 获取所有页面句柄

driver.switchTo().window(w); 切换到句柄为w的页面,

句柄用来标识页面,一个页面一个句柄; 

屏幕截图
我们的自动化脚本⼀般部署在机器上自动的去运行,如果出现了报错也不知道,可以通过抓拍来记
录当时的错误场景;
屏幕截图方法需要额外导入包:
<dependency>
 <groupId>commons-io</groupId>
 <artifactId>commons-io</artifactId>
 <version>2.6</version>
</dependency>
  File file = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);//文件形式保存截图
  FileUtils.copyFile(file, new File(filename));//file放在指定位置
类型 方法 特点
视口截图 getScreenshotAs() 只捕获当前可见区域
全屏截图 getFullPageScreenshotAs() 捕获整个页面(需要浏览器支持)
等待

一般程序代码执行很快,但是页面还没有渲染出来,所以需要等待一下页面渲染;

强制等待
Thread.sleep();  //线程休眠指定时间
优点:使用简单;
确点:程序死等,要是元素可见了还是会等,低效;
隐式等待
隐式等待是⼀种智能等待,他可以规定在指定时间内不断查找元素,如果找到则代码 继续执行,直到超时没找到元素才会报错;隐式等待不会判断元素是否为可点击状态,只判断是否出现;
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(2));//隐式等待两秒
参数:Duration类中提供毫秒、秒、分钟等方法;
优点:只需要设置一次,作用于全局,即只要driver对象没有被释放掉(driver.quit()),后面查找元素都会生效;
缺点:不能判断复杂的情况,如元素是否可点击;
显示等待
显示等待也是⼀种智能等待,在指定等待时间范围内,只要满足指定的条件就会放弃等待,继续执行后续代码;不是全局生效;
WebDriverWait wait= new WebDriverWait(driver,Duration.ofSeconds(3))
.until(ExceptedConditions.elementToBeClickable(By.cssSelector("#id")));

驱动driver在3秒内,如果“#id”这个元素可以被点击的条件满足则停止等待,继续执行;

ExpectedConditions类提供了多种预定义的等待条件,以下是常用的条件: 
方法返回值:boolean;
presenceOfElementLocated(By locator);  等待元素出现在DOM中,locator表示定位元素的方法,如cssSelector,xpath;
visibilityOfElementLocated(By locator);等待元素出现在DOM中并可见;
elementToBeClickable();  等待元素可点击
textToBePresentInElement(); 等待元素的文本包含指定文本
textToBe(By locator,String str); 指定元素的文本内容是否与预期字符串完全匹配
urlToBe(String url);  前页面的url是否是指定的url
条件 检查内容 适用场景
presence_of_element_located 仅DOM存在 快速检查元素注入
visibility_of_element_located DOM+可见性 需要交互的元素
element_to_be_clickable DOM+可见性+可点击状态 按钮/链接等

优点:不会浪费太多时间,灵活,不同操作设置不同等待条件;

缺点:配置条件有点麻烦;

注意:

隐式等待和显示等待混用可能导致等待时间不可预测;

DOM的定义:

DOM是HTML/XML文档的编程接口,它将文档表示为节点树结构,允许程序和脚本动态访问和更新文档内容、结构和样式。

节点类型 数值代码 示例
Element 1 <div><p> 页面标签元素
Attr 2 class="example",属性 
Text 3 文本信息
Comment 8 <!-- 注释 -->
Document 9 整个文档对象
浏览器导航

driver.navigate( ).to();  打开网站

简易写法:driver.get(" ");  打开网站,

dirver.navigate().back(); 后退页面

diver.navigate().forward();  前进一个页面

diver.navigate().refresh();   刷新页面

弹窗

弹窗在页面,driver找不到任何元素,只能先处理弹窗。

使⽤selenium提供的Alert接⼝
driver.switchTo.alert(); 驱动控制弹窗
alert.accept()   同意
alert.dismiss()  取消
文件上传
点击文件上传的场景下会弹出系统窗口进行文件 选择,Selenium无法识别非web的控件,上传文件窗口为系统自带,无法识别窗口元素,但可以用sendkeys来上传指定路径的文件。
点击⽂件上传的场景下会弹窗系统窗⼝,进行⽂件的选择。
selenium无法识别非web的控件,上传文件窗⼝为系统⾃带,文法识别窗⼝元素
但是可以使⽤sendkeys来上传指定路径的⽂件,达到的效果是⼀样的
浏览器参数设置
设置无头模式
ChromeOptions option=new ChromeOptions();
option.addArguments("--remote-allow-origins=*");//运行驱动打开任何界面
option.addArguments("-headless"); //设置无头模式


网站公告

今日签到

点亮在社区的每一天
去签到