一.什么是自动化测试
自动化测试相当于将人工测试手段进行转换,让代码去执行
自动化测试分类
- 单元测试:最大的投入应该放在单元测试,单元测试的频率也是最高的,在java中我们用的单元测试框架为Junit,在另一篇博客有介绍
- 接口自动化:接口测试就是API测试,执行起来更稳定,常见的接口自动化测试工具有,RobotFramework,JMeter,SoapUI,TestNG+HttpClient,Postman等。
- UI自动化:虽然我们应该尽量多做API层的自动化测试,但是UI层的自动化测试更加贴近用户软件系统的事迹业务
二.selenium介绍
1.定义
selenium是web应用中基于UI的自动化测试框架
2.特点
支持各种浏览器,支持各种平台,支持各种语言(Python,Java,C#,JS),有丰富的api
3.原理
三.webdriver API
1.定位元素
(1)CSS选择语法
可以按id选择,按类选择,按标签选择,后代选择器:父级选择器 子级选择器进行选择
id选择:
WebDriver webDriver=new ChromeDriver();
//打开百度首页
webDriver.get("http://www.baidu.com/");
//按id查找
WebElement element=webDriver.findElement(By.cssSelector("#kw"));
类选择:
WebDriver webDriver=new ChromeDriver();
//打开百度首页
webDriver.get("http://www.baidu.com/");
//按类查找
WebElement element= webDriver.findElement(By.cssSelector(".s_ipt"));
element.sendKeys("测试");
标签选择:
WebDriver webDriver=new ChromeDriver();
webDriver.get("http://www.baidu.com/");
List<WebElement> elements=webDriver.findElements(By.tagName("input"));
for(WebElement elemnet:elements){
System.out.println(elemnet.getText());
}
这里定位到的element可能不止一个,因此用数组接收
后代选择:这里指的就是父级选择器 子级选择器
WebDriver webDriver=new ChromeDriver();
webDriver.get("http://www.baidu.com/");
webDriver.findElement(By.cssSelector("div#s-hotsearch-wrapper .c-icon"));
注意
如果代码出现问题,我们可以检查一下Chrome的配置,将代码修改为如下
ChromeOptions options = new ChromeOptions();
//允许所有请求
options.addArguments("--remote-allow-origins=*");
WebDriver webDriver=new ChromeDriver(options);
(2)XPath选择定位
XPath 是一种在XML 文档中定位元素的语言。因为HTML 可以看做XML 的一种实现,所以selenium 用户可以使用这种强大语言在web 应用中定位元素。
如何找到Xpath:
WebDriver webDriver=new ChromeDriver();
webDriver.get("http://www.baidu.com/");
WebElement element=webDriver.findElement(By.xpath("//*[@id=\"kw\"]"));
element.sendKeys("测试");
2.操作测试对象
定位只是第一步,定位之后需要对这个元素进行操作。是鼠标点击还是键盘输入,或者清除元素的内容,或者提交表单等
介绍几个常用的操作测试对象的方法
click 点击对象
send_keys 在对象上模拟键盘输入
clear 清除对象输入的文本内容
submit 提交
如果点击的元素放在form标签中,此时click和submit一样
如果非form标签,则代码会报错
getAttribute 获得属性值
text 获取元素文本
3.添加等待
(1)sleep强制等待
sleep(3000);
(2)隐式等待
隐式等待更有优势,如果在设定时间之内获取到了元素,则会执行下面代码,不会继续等待;如果没找到,则进行报错
webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
4.打印信息
(1)打印title
(2)打印url
WebDriver webDriver=new ChromeDriver();
webDriver.get("http://www.baidu.com/");
System.out.println(webDriver.getTitle());
System.out.println(webDriver.getCurrentUrl());
5.浏览器操作
(1)浏览器前进
webDriver.navigate.forward();
(2)浏览器后退
webDriver.navigate.back();
(3)浏览器最大化
webDriver.manage().window().fullscreen();
(4)设置浏览器宽和高
webDriver.manage().window().setSize(new Dimension(80,60));
(5)浏览器滚动条操作
#将浏览器滚动条滑到最顶端
document.documentElement.scrollTop=0
#将浏览器滚动条滑到最底端
document.documentElement.scrollTop=10000
#将浏览器滚动条滑到最底端, 示例
//强制类型转换为js进行浏览器滚动 ((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=10000");
(6)关闭浏览器
quit和close
quit关闭了整个浏览器,close只是关闭了当前的页面
quit清空缓存,close不会清空缓存
webDriver.close();
(7)鼠标操作
//鼠标右击
Actions actions=new Actions(webDriver);
actions.moveToElement(webElement).contextClick().perform();
contextClick 右击
doubleClick 双击
dragAndDrop 拖动
moveToElement 移动
(8)截图操作
File file=((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(file,new File("路径"));
tClick 右击
doubleClick 双击
dragAndDrop 拖动
moveToElement 移动
(8)截图操作
File file=((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(file,new File("路径"));