目录
一、什么是自动化测试
自动化测试指软件测试的自动化,在预设状态下运行应用程序或者系统,预设条件包括正常和异常,最 后评估运行结果。将人为驱动的测试行为转化为机器执行的过程。自动化测试包括UI自动化,接口自动化,单元测试自动化。
单元自动化测试 | 最大的投入应该在单元测试上,单元测试运行的频率也更加高。 java的单元测试框架是Junit |
接口自动化测试 | 接口测试就是API测试,相对于UI自动化API自动化更加容易实现,执行起来也更稳定 常见的接口自动化测试工具有,RobotFramework,JMeter,SoapUI,TestNG+HttpClient,Postman 等 |
UI自动化测试 | UI层的自动化测试更加贴近用户的需求和 软件系统的实际业务 |
什么是selenium?---->做UI自动化测试的工具
二、selenium优点
1.免费查看源码
2.支持各大浏览器
3.跨平台
4.有丰富的API
三、selenium工作原理
驱动:测执行文件,让代码操作浏览器
四、环境搭建(java+selenium)
1.下载chrome浏览器
2.查看浏览器的版本下载对应版本的驱动)
3.下载驱动
Chrome for Testing availability (googlechromelabs.github.io)
将下载好的驱动解压并且复制到浏览器的安装位置上
4.配置环境变量
4.1驱动配置
4.2浏览器配置

5.测试
5.1启动idea创建Maven项目
5.2引入依赖
<dependencies>
<!--selenium java web 自动化测试-->
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
</dependencies>
5.3编写代码
public class Main {
public static void main(String[] args) {
WebDriver webDriver=new ChromeDriver();
webDriver.get("https://www.baidu.com/");
}
}
5.4启动
五、selenium相关API
以百度首页为例找inpu框
1.定位元素方式
1.1CSS选择器定位元素
类选择器:.class值(.s_ipt)
id选择器:#id值(#kw)
name选择器:name值(wd)
父类选择器:父类选择器表达式 子类选择器表达式(form span)
1.2标签选择器:标签名(form)
1.3Xpath:
绝对路径:通过/开头
相对路径:通过//开头
相对路径加属性值
相对路径加索引
相对路径加通配符
相对路径加文本
补:css比xpath更加优
快捷:
2.使用示例
//创建驱动
WebDriver webDriver=new ChromeDriver();
//打开百度首页
webDriver.get("https://www.baidu.com/");
//定位元素
WebElement search_input= webDriver.findElement(By.cssSelector(".s_ipt"));
//标签定位
WebElement search_input2= webDriver.findElement(By.tagName("input"));
//通过xpath定位
WebElement search_input1=webDriver.findElement(By.xpath("//*[@id=\"kw\"]"));
3.关闭浏览器
//关闭浏览器
webDriver.quit();//关的更彻底cookies都删了
webDriver.close();//对应的信息都没有删除
六、selenium定位元素的API
1.click点击对象
2.sendKeys在对象上输入文本
3.getTest()获取文本信息
4.clear 清除对象输入的文本内容
5.submit 提交
6等待
sleep强制等待
智能等待
隐式等待
webDriver.manage().timeouts().implicitlyWait(5,HOURS);
隐式地等待并非一个固定的等待时间,当脚本执行到某个元素定位时,如果元素可以定位,则继续执 行;如果元素定位不到,则它以轮询的方式不断的判断元素是否被定位到。直到超出设置的时长。
显示等待(等待某一个元素)
WebDriverWait webDriverWait=new WebDriverWait(webDriver,3); webDriverWait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#s-top-left > a:nth-child(1)")));
//创建驱动
WebDriver webDriver = new ChromeDriver();
//打开百度首页
webDriver.get("https://www.baidu.com/");
//知道对应的元素
WebElement search_input = webDriver.findElement(By.cssSelector("#kw"));
//输入框输入“软件按测试”
search_input.sendKeys("软件测试");
sleep(1000);
//知道百度一下
WebElement button = webDriver.findElement(By.cssSelector("#su"));
webDriver.manage().timeouts().implicitlyWait(5,HOURS);
//点击
button.click();
//button.submit();打开百度搜索页面,按钮“百度一下”元素的类型type=“submit”,与click效果相同click相当于鼠标点击
//如果类型不是submit就无法使用
//等待页面渲染
sleep(5000);
//校验,搜索结果没有软件测试,则测试不通过
List<WebElement> elements = webDriver.findElements(By.cssSelector("a em"));
for (WebElement element : elements) {
if (element.getText().equals("软件测试")) {
System.out.println("测试通过");
} else {
System.out.println("测试不通过");
}
}
webDriver.quit();
//关闭页面
注意:submit需要放在form标签中,click没有限制,所以建议使用click
7.获取title和url
private static void Test06() {
//创建驱动
WebDriver webDriver=new ChromeDriver();
//打开百度
webDriver.get("https://www.baidu.com/");
String title=webDriver.getTitle();
System.out.println(title);
//拿到url
String url=webDriver.getCurrentUrl();
System.out.println(url);
if(url.equals("https://www.baidu.com/"))
{
System.out.println("测试通过");
}
else {
System.out.println("测试不通过");
}
webDriver.manage().timeouts().implicitlyWait(3,HOURS);
webDriver.quit();
}
9.浏览器
9.1浏览器大小设置
private static void Test07() throws InterruptedException {
//创建驱动
WebDriver webDriver=new ChromeDriver();
//打开百度
webDriver.get("https://www.baidu.com/");
//浏览器最大化
webDriver.manage().window().maximize();
sleep(3000);
//设置浏览器的大小
webDriver.manage().window().setSize(new Dimension(200,200));
sleep(3000);
//定位设置元素
WebElement element=webDriver.findElement(By.cssSelector("#s-usersetting-top"));
//校验存不存在
webDriver.quit();
}
9.2浏览器的前进后退
private static void Test08() throws InterruptedException {
//创建驱动
WebDriver webDriver=new ChromeDriver();
//打开百度首页
webDriver.get("https://www.baidu.com/");
//找到搜索框
WebElement webElement=webDriver.findElement(By.cssSelector("#kw"));
//输入张三
webElement.sendKeys("张三");
//点击百度一下的按钮
webDriver.findElement(By.cssSelector("#su")).submit();
//浏览器回退到上一个
webDriver.navigate().back();
webDriver.navigate().to("https://www.baidu.com/");
//浏览器前进
webDriver.navigate().forward();
String url=webDriver.getCurrentUrl();
//检查url
if("https://www.baidu.com/".equals(url))
{
System.out.println("浏览器前进成功");
}
else
{
System.out.println("前进失败");
System.out.println(url);
}
sleep(3000);
webDriver.quit();
}
9.3浏览器滚动条
private static void Test09() throws InterruptedException {
//创建驱动
WebDriver webDriver=new ChromeDriver();
//打开百度首页
webDriver.get("https://www.baidu.com/");
//找到输入框
WebElement element=webDriver.findElement(By.cssSelector("#kw"));
//输入鲜花
element.sendKeys("鲜花");
//点击百度一下
webDriver.findElement(By.cssSelector("#su")).click();
//等待三秒
sleep(3000);
//将滚动条滑倒最下面,s->滚动条的js
//先强后后使用
((JavascriptExecutor)webDriver).executeScript("document.documentElement.scrollTop=10000");
sleep(3000);
webDriver.quit();
}
10.键盘组合
通过sendKeys()调用按键:
sendKeys(Keys.TAB) # TAB
sendeKys(Keys.ENTER) # 回车
sendKeys(Keys.SPACE) #空格键
sendKkeys(Keys.ESCAPE) #回退键(Esc)
private static void Test010() throws InterruptedException {
//创建驱动
WebDriver webDriver = new ChromeDriver();
//打开百度首页
webDriver.get("https://www.baidu.com/");
//找到输入框
WebElement element = webDriver.findElement(By.cssSelector("#kw"));
//输入鲜花并回车
//element.sendKeys("鲜花",Keys.ENTER);
//输入鲜花
element.sendKeys("鲜花");
//回车
element.sendKeys(Keys.ENTER);
sleep(3000);
//校验
List<WebElement> elements = webDriver.findElements(By.xpath("//font[text()=\"鲜花\"]"));
for (WebElement webElement : elements) {
System.out.println(webElement.getText());
if ("鲜花".equals(webElement.getText())) {
System.out.println("测试通过");
} else {
System.out.println("测试不通过");
}
}
webDriver.quit();
}
sendKeys(Keys.CONTROL,'a') #全选(Ctrl+A)
sendKeys(Keys.CONTROL,'c') #复制(Ctrl+C)
sendKeys(Keys.CONTROL,'x') #剪切(Ctrl+X)
sendKeys(Keys.CONTROL,'v') #粘贴(Ctrl+V)
private static void Test011() throws InterruptedException {
//创建驱动
WebDriver webDriver = new ChromeDriver();
//打开百度首页
webDriver.get("https://www.baidu.com/");
//找到输入框
WebElement element = webDriver.findElement(By.cssSelector("#kw"));
//输入鲜花
element.sendKeys("鲜花");
//sendKeys(Keys.CONTROL,'a') #全选(Ctrl+A)
//
//sendKeys(Keys.CONTROL,'c') #复制(Ctrl+C)
//
//sendKeys(Keys.CONTROL,'x') #剪切(Ctrl+X)
//
//sendKeys(Keys.CONTROL,'v') #粘贴(Ctrl+V)
//全选
element.sendKeys(Keys.CONTROL, "A");
sleep(3000);
System.out.println(element.getText());
//剪贴
element.sendKeys(Keys.CONTROL, "X");
sleep(3000);
System.out.println(element.getText());
//粘贴
element.sendKeys(Keys.CONTROL, "V");
sleep(3000);
System.out.println(element.getText());
//回车
element.sendKeys(Keys.ENTER);
sleep(3000);
//校验
List<WebElement> elements = webDriver.findElements(By.xpath("//font[text()=\"鲜花\"]"));
for (WebElement webElement : elements) {
System.out.println(webElement.getText());
if ("鲜花".equals(webElement.getText())) {
System.out.println("测试通过");
} else {
System.out.println("测试不通过");
}
}
webDriver.quit();
}
七、鼠标事件
ActionChains 类
contextClick() 右击
doubleClick() 双击
dragAndDrop() 拖动
moveToElement() 移动
private static void Test012() throws InterruptedException {
//创建驱动
WebDriver webDriver = new ChromeDriver();
//打开百度首页
webDriver.get("https://www.baidu.com/");
//找到输入框
WebElement element = webDriver.findElement(By.cssSelector("#kw"));
//输入鲜花并回车
element.sendKeys("鲜花",Keys.ENTER);
//鼠标操作
Actions actions=new Actions(webDriver);
sleep(3000);
//鼠标移动到资讯
//perform();显示效果
actions.moveToElement(webDriver.findElement(By.xpath("//*[@id=\"s_tab\"]/div/a[2]"))).perform();
actions.doubleClick().perform();
webDriver.manage().timeouts().implicitlyWait(5,HOURS);
webDriver.quit();
}
八、多层框架/窗口定位
private static void Test013() throws InterruptedException {
//创建驱动
WebDriver webDriver = new ChromeDriver();
//打开百度首页
webDriver.get("https://www.baidu.com/");
//点击新闻按钮
webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)")).click();
webDriver.manage().timeouts().implicitlyWait(5,SECONDS);
//校验跳转页面
if("https://news.baidu.com/".equals(webDriver.getCurrentUrl()))
{
System.out.println("跳转成功");
}
else {
System.out.println("跳转失败");
}
//找到当前句柄
String cur=webDriver.getWindowHandle();
//获取窗口句柄
Set<String> all=webDriver.getWindowHandles();
//找到最新的
String tar="";
for(String tmp:all)
{
tar=tmp;
}
//切换窗口
webDriver.switchTo().window(tar);
//找到输入框输入经济新闻,并回车
webDriver.findElement(By.cssSelector("#ww")).sendKeys("经济新闻",Keys.ENTER);
sleep(3000);
//校验
List<WebElement> elements = webDriver.findElements(By.xpath("//em[text()=\"经济\"]"));
for (WebElement webElement : elements) {
System.out.println(webElement.getText());
if ("经济".equals(webElement.getText())) {
System.out.println("测试通过");
} else {
System.out.println("测试不通过");
}
}
webDriver.quit();
}
九、截图
下载依赖包
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
private static void Test014() throws InterruptedException, IOException {
//创建驱动
WebDriver webDriver = new ChromeDriver();
//打开百度首页
webDriver.get("https://www.baidu.com/");
//找到输入框元素
WebElement search_input = webDriver.findElement(By.cssSelector("#kw"));
//输入框输入“软件按测试”
search_input.sendKeys("软件测试");
sleep(1000);
//知道百度一下
WebElement button = webDriver.findElement(By.cssSelector("#su"));
sleep(1000);
//点击
button.click();
//截图
File file=((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
//保存
FileUtils.copyFile(file,new File("D://jietu.png"));
sleep(1000);
webDriver.quit();
}
十、下拉框
借助select
private static void Test017() {
//创建驱动
WebDriver webDriver = new ChromeDriver();
//打开百度首页
webDriver.get("");
//找到输入框元素
WebElement search_input = webDriver.findElement(By.cssSelector("#kw"));
//输入框输入“软件按测试”
search_input.sendKeys("软件测试");
//借助select
Select select=new Select(search_input);
//根据索引从0开始
select.selectByIndex(1);
//根据值
select.selectByValue("111");
}
十一、弹窗
private static void Test018() throws InterruptedException {
WebDriver webDriver = new ChromeDriver();
webDriver.get("file:///D:/Users/18212/selenium/AutoTestSelenium/src/main/java/page/test04.html");
//点击弹窗
webDriver.findElement(By.cssSelector("body > button")).click();
sleep(1000);
//切换到弹窗并在弹窗了输入内容
webDriver.switchTo().alert().sendKeys("圆");
sleep(3000);
//确认
webDriver.switchTo().alert().accept();
WebElement element = webDriver.findElement(By.cssSelector("body > div"));
if ("圆".equals(element.getText())) {
System.out.println("测试通过");
} else {
System.out.println("测试不通过");
}
sleep(1000);
webDriver.quit();
}
十二、上传文件操作
//上传文件
private static void Test019() {
WebDriver webDriver=new ChromeDriver();
webDriver.get("file:///D:/Users/18212/selenium/AutoTestSelenium/src/main/java/page/test05.html");
//上传文件
webDriver.findElement(By.cssSelector("body > input[type=file]")).sendKeys("C:\\Users\\18212\\Downloads\\chromedriver-win64 (1).zip");
}