前言:
本章主要介绍自动化测试UI界面时,一些典型的控件抓取。后续也会持续更新~
(一)下拉框
1. 常见下拉框类型
常见类型:
- select下拉框
- 非select下拉框
对select下拉框进行处理时,需要使用selenium封装的方法:Select list = new Select(locator);
具体参考:selenium webdriver + java 下拉框处理_kongc3的博客-CSDN博客
2. 举例说明
具体代码(非select下拉框):
代码实现了对如下图的下拉框进行操作。
public void sendRegTypeHandle(String type) throws IOException, InterruptedException {
WebElement el_down = rep.getRegSelectElement();
el_down.click();
Thread.sleep(1000);
rep.dr.findElement(By.xpath("//li[text()=\""+type+"\"]")).click();
Thread.sleep(1000);
}
实现方法:
- 拿到下拉框的元素xpath,进行click点击展开。
- 休眠1s
- 拿到下拉框选项的xpath,进行click点击选择。
下拉框选项的xpath格式://li[text()=\"需求方\"]
注意:测试时一直尝试用id和class定位,还有直接copy xpath,一直显示定位不到,后面修改xpath='//li[text()="需求方"]'后就ok了,我们不能太依赖xpath的自动生成,应该自己修改一下,才能精准定位。
(二)错误截图
1. 举例说明
具体代码:
package test.Utils;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import test.Page.BasePage;
public class ScreenDriver {
public void screenDriver(String screenname) throws IOException, InterruptedException {
//调用截图方法
File src = ((TakesScreenshot) BasePage.dr).getScreenshotAs(OutputType.FILE);
//拷贝截图文件到指定路径
FileUtils.copyFile(src, new File("src\\test\\Report\\"+screenname+".png"));
}
}
实现方法:
- 使用driver.getScreenshotAs(OutputType.FILE)截图
- 使用.copyFile将截好的图片放到指定路径。
(三)断言
1. 常见断言
参考资料:自动化测试常用断言的使用方法(python+selenium) - 乐乐熊小妹 - 博客园
这里介绍以下几个断言方法:
- assertEqual:如两个值相等,则pass
- assertNotEqual:如两个值不相等,则pass
- assertTrue:判断bool值为True,则pass
- assertFalse:判断bool值为False,则Pass
- assertIsNone:不存在,则pass
- assertIsNotNone:存在,则pass
- 2. 举例说明
- assertIsNone:不存在,则pass
- assertFalse:判断bool值为False,则Pass
- assertTrue:判断bool值为True,则pass
- assertNotEqual:如两个值不相等,则pass
具体代码:
代码实现了对登录失败的场景进行断言,判断提示信息是否与期望结果一致。
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.testng.Assert;
//断言
WebElement alert = dr.findElement(By.xpath("/html/body/div[2]/div/span/div/div/div/span"));
String info = alert.getText();
System.out.println("获取的报错信息是:"+ info);
Assert.assertEquals(info,"Incorrect verification code.","比较报错信息是否存在:");
实现方法:
1. 使用findElement定位到Incorrect verification code.弹框。
2. 使用alert.getText()获取到弹框的文字内容。
3. 使用Assert.assertEquals进行断言。
FAQ
A:导入数据异常Cannot get a text value from a numeric cell
原因:上网查了一下相关资料,发现是因为excel表里的数据如果是纯数字123456这类的话,在读取xls文件的cell的时候,cell的type会是CELL_TYPE_NUMERICl类型,然后我的代码取数据时是cell.getStringCellValue(),用Stirng类型去取它,所以才报这个错。
解决办法:在getStringCellValue()之前,需要set一下cell的type。
row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);