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



xpath
XML路径语言,不仅可以在XML文件中查找信息,还可以在HTML中选取节点,xpath使用路径表达式来选择xml文件中的节点;生成xpath的方式:同selector一样,只是右键选择复制"Copy xpath";
//*:获取HTML页面中的所有节点;
//ul :获取HTML页面欧阳ul节点;
//input:获取HTML页面所以input节点;
//input/..:获取input 节点上一级;
常用函数
操作测试对象
获取信息
窗口
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() | 捕获整个页面(需要浏览器支持) |
等待
一般程序代码执行很快,但是页面还没有渲染出来,所以需要等待一下页面渲染;
强制等待
隐式等待
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(2));//隐式等待两秒
参数:Duration类中提供毫秒、秒、分钟等方法;
显示等待
WebDriverWait wait= new WebDriverWait(driver,Duration.ofSeconds(3))
.until(ExceptedConditions.elementToBeClickable(By.cssSelector("#id")));
驱动driver在3秒内,如果“#id”这个元素可以被点击的条件满足则停止等待,继续执行;
条件 | 检查内容 | 适用场景 |
---|---|---|
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找不到任何元素,只能先处理弹窗。
文件上传
浏览器参数设置
ChromeOptions option=new ChromeOptions();
option.addArguments("--remote-allow-origins=*");//运行驱动打开任何界面
option.addArguments("-headless"); //设置无头模式