Java+Selenium工具自动化测试学习总结

一、自动化测试

1. 什么是自动化

Java+Selenium工具自动化测试学习总结_第1张图片
Java+Selenium工具自动化测试学习总结_第2张图片
Java+Selenium工具自动化测试学习总结_第3张图片

2. Web自动化测试

Java+Selenium工具自动化测试学习总结_第4张图片

3. 测试中自动化的应用

测试流程
Java+Selenium工具自动化测试学习总结_第5张图片
Java+Selenium工具自动化测试学习总结_第6张图片

二、selenium工具集

Java+Selenium工具自动化测试学习总结_第7张图片
Java+Selenium工具自动化测试学习总结_第8张图片
Java+Selenium工具自动化测试学习总结_第9张图片
Java+Selenium工具自动化测试学习总结_第10张图片
Java+Selenium工具自动化测试学习总结_第11张图片

三、 Selenium工作流

Java+Selenium工具自动化测试学习总结_第12张图片

  • Firefox浏览器准备
  • Java环境准备
  • 安装Java -www.oracle.com
  • 下载
  • 安装+配置
  • 验证:javac -version

四、Selenium开发工程

-创建Java工程

  • libs库目录建立
  • Selenium工具下载及引入

第一个例子:Search Selenium

需求:
  • 使用有道搜索Selenium关键字
步骤:
  • 开启Firefox浏览器
  • 访问youdao.com
  • 搜索关键字:Selenium
  • 退出浏览器
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;


public class SearchSelenium {
   public static void main(String[] args){	
   	// 指定浏览器驱动路径(Selenium3新特性)
       System.setProperty ( "webdriver.chrome.driver", "C:\\Program Files\\Google\\Chrome\\Application\\chromedriver.exe" );
    
       // 创建一个ChromeDriver实例
    		WebDriver driver = new ChromeDriver();
   	// 使用driver实例打开百度的首页
   	driver.get("http://www.baidu.com");
   	
   	// 通过输入框的id属性找到百度搜索输入框
   	WebElement element = driver.findElement(By.id("kw"));
   	// 在搜索输入框中输入“Selenium”关键字
   	element.sendKeys("Selenium");
   	// 进行搜索
   	element.submit();
   	
   	// 关闭浏览器
   	driver.quit();
   }
}

五、UI自动化语法

Java+Selenium工具自动化测试学习总结_第13张图片
Java+Selenium工具自动化测试学习总结_第14张图片

1. Web元素定位语法

网易有道搜索 http://youdao.com/
Java+Selenium工具自动化测试学习总结_第15张图片

  • 元素(element)ID
	<element id="value">

Java+Selenium工具自动化测试学习总结_第16张图片

WebElement element = driver.findElement(By.id("query"));
  • 元素Name
	<element name="q">

Java+Selenium工具自动化测试学习总结_第17张图片

WebElement element = driver.findElement(By.name("q"));

元素Class Name

	<element class="s-inpt">

Java+Selenium工具自动化测试学习总结_第18张图片

WebElement element = driver.findElement(By.class("s-inpt"));
  • 超链接文本
	<element href="value">LinkTextelement>

Java+Selenium工具自动化测试学习总结_第19张图片

WebElement element = driver.findElement(By.linkText("有道词典"));
  • 缺省超链接文本
	<element href="value">PartiaLinkTextelement>

Java+Selenium工具自动化测试学习总结_第20张图片

WebElement element = driver.findElement(By.partialLinkText("词典"));
  • 所有包含有道超链接文本
List<WebElement> element = driver.findElements(By.partialLinkText("有道"));

Java+Selenium工具自动化测试学习总结_第21张图片
Java+Selenium工具自动化测试学习总结_第22张图片

  • 元素TagName
	<tag class="value">tag>

Java+Selenium工具自动化测试学习总结_第23张图片

WebElement element = driver.findElement(By.tagName("input"));

如果页面中有多个input元素,则只会返回自上而下第一个元素
Java+Selenium工具自动化测试学习总结_第24张图片

万物皆对象-WebElement

Java+Selenium工具自动化测试学习总结_第25张图片
Java+Selenium工具自动化测试学习总结_第26张图片
输入框元素(Text)
Java+Selenium工具自动化测试学习总结_第27张图片
搜索按钮
Java+Selenium工具自动化测试学习总结_第28张图片
Java+Selenium工具自动化测试学习总结_第29张图片
Java+Selenium工具自动化测试学习总结_第30张图片

第二个例子

Java+Selenium工具自动化测试学习总结_第31张图片
需求抽象出来的操作:
Java+Selenium工具自动化测试学习总结_第32张图片
打开网址(get)
Java+Selenium工具自动化测试学习总结_第33张图片

	WebDriver driver = new FireFoxDriver();
	driver.get("http://photo.163.com");

打开网址(get)-经验总结

  • 使用方式
    Java+Selenium工具自动化测试学习总结_第34张图片
  • 操作特性
    页面完全打开后,方法才结束
  • 注意事项
    不判断重定向后页面的打开情况
    输入内容(sendKeys)
    Java+Selenium工具自动化测试学习总结_第35张图片
	Webelement element = driver.findElement(By.name("username"));
	element.sendKeys("[email protected]");
	element.sendKeys("auto","test1","@163.com");

输入内容(sendKeys)-经验总结

  • 使用对象
    Java+Selenium工具自动化测试学习总结_第36张图片
  • 注意事项
    在原来输入内容后面追加输入
    点击元素(click)
    Java+Selenium工具自动化测试学习总结_第37张图片
WebElement element = driver.findElement(By.className("js-cur"));
element.click();

点击元素(click)-经验总结

  • 使用对象
    在这里插入图片描述
  • 操作特性
    所有元素都是可以被点击的
  • 注意事项
    元素不能被遮挡
    元素不能被隐藏
    清空内容(clear)
    在这里插入图片描述
WebElement element = driver.findElement(By.name("passsword"));
element.clear();

清空内容(clear)-经验总结

  • 使用对象
    Java+Selenium工具自动化测试学习总结_第38张图片
  • 注意事项
    整体清除,不是按一下退格的单个删除
    获取网址(getCurrentUrl)
    Java+Selenium工具自动化测试学习总结_第39张图片
WebDriver driver = new FirefoxDriver();
driver.get("http://photo.163.com");
System.out.println(driver.getCurrentUrl);

获取网址(getCurrentUrl)-经验总结

  • 操作特性
    http://photo.163.com
    http://www.youdao.com/search?q=selenium
    http://photo.163.com/autotest1/#m=0&p=
    获取页面标题(getTitle)
    Java+Selenium工具自动化测试学习总结_第40张图片
System.out.println(driver.getTitle());

获取页面标题(getTitle)-经验总结

  • 使用对象
    在这里插入图片描述
  • 注意事项
    如果不存在Title,则返回NULL
    获取文案(getText)
    Java+Selenium工具自动化测试学习总结_第41张图片
WebElement element = driver.findElement(By.className("album"));

System.out.println(”element.getText()“);
获取文案(getText)-经验总结

  • 使用对象
    在这里插入图片描述
  • 注意事项
    包含子元素中的Text内容
    元素不能被CSS隐藏
    关闭浏览器(quit)
    在这里插入图片描述
driver.quit();

关闭浏览器(quit)-经验总结

  • 注意事项
    测试结束后不关闭则常驻内存,导致内存溢出
    Java+Selenium工具自动化测试学习总结_第42张图片
    Java+Selenium工具自动化测试学习总结_第43张图片

XML与HTML

  • XML(eXtensilble Markup Language): 简称XML,可扩展标记语言
    Java+Selenium工具自动化测试学习总结_第44张图片
  • HTML(HyperText Markup Language):超文本标记语言
    Java+Selenium工具自动化测试学习总结_第45张图片

XPath

  • XPath:XML Path Language XML路径语言
  • XPath是一种查询语言,是一种用来确定XML文档中某部分位置的语言
    Java+Selenium工具自动化测试学习总结_第46张图片
    XPath语法:绝对路径 /
    Java+Selenium工具自动化测试学习总结_第47张图片
    Java+Selenium工具自动化测试学习总结_第48张图片
    Java+Selenium工具自动化测试学习总结_第49张图片
    XPath语法:模糊匹配路径 //
    Java+Selenium工具自动化测试学习总结_第50张图片

XPath语法:父节点 …

Java+Selenium工具自动化测试学习总结_第51张图片
XPath语法:指定顺序【?】
Java+Selenium工具自动化测试学习总结_第52张图片
Java+Selenium工具自动化测试学习总结_第53张图片
XPath语法:星号 *
Java+Selenium工具自动化测试学习总结_第54张图片
Java+Selenium工具自动化测试学习总结_第55张图片
XPath语法:元素属性 @
Java+Selenium工具自动化测试学习总结_第56张图片
Java+Selenium工具自动化测试学习总结_第57张图片
XPath语法:Text
Java+Selenium工具自动化测试学习总结_第58张图片
推荐第二种
XPath语法: start-with()与contains()
Java+Selenium工具自动化测试学习总结_第59张图片
Java+Selenium工具自动化测试学习总结_第60张图片

XPath实战

  • 工具:FireFox插件 XPath Checker / Chrome插件 XPath helper
  • driver.findElement(By.xpath(“xpath”))

元素定位总结

  • 元素具有ID属性,优先使用ID定位
  • 其次使用name属性,但是需要确定是否是唯一
  • 定位链接元素时,考虑使用Link Text
  • 当其他定位方法准确定位时,可以使用XPath定位
  • XPath是通用的定位方法,但需要使用时注意XPath语法的稳定性
    Java+Selenium工具自动化测试学习总结_第61张图片
    更推荐第二种方法:假如页面结构发生了变更,新增或删除了某个div节点,第一种定位方式就失效,而第二种定位方式只要id没有变化,就可以定位到这个元素

测试用例-验证云相册下载功能
Java+Selenium工具自动化测试学习总结_第62张图片

浏览器窗口切换(switchTo.window)

Java+Selenium工具自动化测试学习总结_第63张图片
Java+Selenium工具自动化测试学习总结_第64张图片

  • 使用方法
String currentWindow = driver.getWindowHandle();
driver.switchTo().window(currentWindow);
  • 注意事项
    每次打开同一窗口,window的句柄值都不一样
    getWindowHandle返回当前窗口的句柄
  • 关键操作:
    切换浏览器窗口到新开的云相册详情页窗口
    for(String winHandle:driver.getWindowHandles()) {
    driver.switchTo().window(winHandle);
    }

Frames切换(switchTo.frame)

Java+Selenium工具自动化测试学习总结_第65张图片
Java+Selenium工具自动化测试学习总结_第66张图片

Frames切换(switchTo.frame)-经验总结

  1. 使用方法
  • driver.switchTo().frame(0);
  • driver.switchTo().frame(“iframe”);
  • WebElement element = driver.findElement(By,id(“iframe”));
    driver.switchTo().frame(element);
    2. 注意事项
    建议通过frame的id或者name来进行切换,较少使用index
    测试用例-验证相册评论功能
  • 关键操作:
    切换frame到底部评论区
    输入评论
    切换回主页面
	driver.switchTo().frame(driver.findElement(By.xpath("//div[@class=‘j-main’]//iframe")));
	driver.findElement(By.xpath("//Body")).sendKeys("发表评论");
	driver.switchTo().defaultContent();

测试用例- 验证创建相册提示功能
Java+Selenium工具自动化测试学习总结_第67张图片

浏览器弹框操作(switchTo.alert)

Java+Selenium工具自动化测试学习总结_第68张图片

	Alert alert = driver.switchTo().alert();	

Java+Selenium工具自动化测试学习总结_第69张图片

	Alert alert = driver.switchTo().alert();	
	alert.accept();

浏览器弹框操作(switchTo.alert)-经验总结

注意事项

  • 页面上出现了alert弹窗才可以使用switchTo.alert
  • 只有alert类型的弹窗才适用
  • 在alert弹窗消除之前,无法对页面上其他元素进行操作

测试用例- 验证创建相册提示功能

关键操作:

  • 切换到alert弹窗
  • 关闭该alert弹窗
	Alert alert = driver.switchTo().alert();	
	alert.accept() ;

测试用例- 验证相册自定义排序功能

Java+Selenium工具自动化测试学习总结_第70张图片

元素拖拽操作(dragAndDrop)

Java+Selenium工具自动化测试学习总结_第71张图片

  • 使用方法
	WebElement element = driver.findElement(By.name("source"));
	WebElement target = driver.findElement(By.name("target"));
	Action act = new Actions(driver);
	act.dragAndDrop(element, target).perform();

Java+Selenium工具自动化测试学习总结_第72张图片
关键操作:

  • 拖拽相册A,移动到相册B和C之间
	WebElement element = driver.findElement(By.xpath("//div[@title='A']"));
	WebElement target = driver.findElement(By.xpath("//div[@title='C']"));
	Actions act = new Actions(driver);
	act.dragAndDrop(element, target).perform();	

测试用例-验证删除相册功能

在这里插入图片描述

系统事件操作

Java+Selenium工具自动化测试学习总结_第73张图片
Java+Selenium工具自动化测试学习总结_第74张图片
Java+Selenium工具自动化测试学习总结_第75张图片
Java+Selenium工具自动化测试学习总结_第76张图片
Java+Selenium工具自动化测试学习总结_第77张图片

	Action builder = new Actions(driver);
	Action act = builder.clickAndHold(someElement).moveToElement(otherElement).release(otherElement).build();
	act.perform();

系统事件操作-经验总结

注意事项

  • Action对象的动作链应该尽量的短。在使用中最好在执行一个简短的动作后验证页面是否处于正确的状态,然后再执行后面的操作。

测试用例-验证删除相册功能

关键操作

  • 移动鼠标到一个相册上
	WebElement element = driver.findElement(By.xpath("//div[@class='ln ln0'][1]"));

	Actions builder = new Actions(driver);
	Action hover = builder.moveToElement(element).build();
	hover.perform();

设置等待时间

方法一:隐式等待
在这里插入图片描述
Java+Selenium工具自动化测试学习总结_第78张图片

  1. 用于管理元素定位的等待时间
  2. 用于管理页面加载的等待时间
  3. 用于管理脚本执行的等待时间
    使用方法
	// 设置元素出现的等待时间是10s,元素默认的等待时间是0s
	driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
	// 将页面默认的加载时间从60s改为10s
	driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
	// 设置脚本的执行时间为10s,默认是0s
	driver.manage().timeouts().setScriptTimeout(10, TimeUnit.SECONDS);

方法二:显式等待

  • Explicit Waits
	WebDriverWait wait = new WebDriverWait(driver, time period);
	wait.until(ExpectedConditions.presenceOfElementLocated(By.id("id")));
  • 注意事项
    不要混用隐式等待(Implicit Waits)和显式等待( Explicit Waits),否则将会导致不可预计的等待时间。
    在这里插入图片描述
    距离真正的Web自动化测试还缺少什么?
    Java+Selenium工具自动化测试学习总结_第79张图片
    Java+Selenium工具自动化测试学习总结_第80张图片

TestNG简介

- Next Generation Java Testing

安装Eclipse的TestNG插件

Java+Selenium工具自动化测试学习总结_第81张图片

TestNG基础:注解(Annotation)

Java+Selenium工具自动化测试学习总结_第82张图片

TestNG基础:验证(Assert)

Java+Selenium工具自动化测试学习总结_第83张图片
Java+Selenium工具自动化测试学习总结_第84张图片
Java+Selenium工具自动化测试学习总结_第85张图片

用例集组织——@Test属性使用

Java+Selenium工具自动化测试学习总结_第86张图片

用例集组织——testng.xml用例集

Java+Selenium工具自动化测试学习总结_第87张图片
Java+Selenium工具自动化测试学习总结_第88张图片
Java+Selenium工具自动化测试学习总结_第89张图片
Java+Selenium工具自动化测试学习总结_第90张图片

TestNG基础:报告

Java+Selenium工具自动化测试学习总结_第91张图片

用例分析

Java+Selenium工具自动化测试学习总结_第92张图片

测试准备-前置准备(@BeforeClass)

Java+Selenium工具自动化测试学习总结_第93张图片
Java+Selenium工具自动化测试学习总结_第94张图片

测试准备-前置判断(Assert)

Java+Selenium工具自动化测试学习总结_第95张图片
Java+Selenium工具自动化测试学习总结_第96张图片

测试退出(AfterClass)

Java+Selenium工具自动化测试学习总结_第97张图片
Java+Selenium工具自动化测试学习总结_第98张图片
Java+Selenium工具自动化测试学习总结_第99张图片

测试内容-验证点唯一

Java+Selenium工具自动化测试学习总结_第100张图片

测试内容-数据清理(AfterMethod)

在这里插入图片描述
Java+Selenium工具自动化测试学习总结_第101张图片

测试内容-数据驱动(@DataProvider)

Java+Selenium工具自动化测试学习总结_第102张图片
Java+Selenium工具自动化测试学习总结_第103张图片
Web自动化再进一步——可维护性封装

  • 云相册Web自动化测试用例:登录
    登录元素定位变更?
    登录多了确认框?
  • Page Object封装:martinfowler.com/bliki/PageObject.html
    Java+Selenium工具自动化测试学习总结_第104张图片
    Web自动化再进一步——通用性封装
  • 一个测试用例Web、Android、IOS共同执行
  • 使用自然语言编写Web自动化测试用例
    Java+Selenium工具自动化测试学习总结_第105张图片

Web自动化与持续集成

  1. 持续集成——Continuous Intergration
  • 持续的针对最新代码提交快速的完成集成、构建、测试的软件工程实践
  • 包含静态检查、自动测试等一系列自动化质量保障手段
    Java+Selenium工具自动化测试学习总结_第106张图片
  1. 持续集成的威力:
  • 解决团队开发模式下代码集成困难
  • 更早的发现问题,更快的解决问题
  • 为每一次代码更新提供质量评估,为快速部署上线提供了可能
  1. 完善的Web持续集成体系
    Java+Selenium工具自动化测试学习总结_第107张图片
  2. 持续集成与质量度量
    Java+Selenium工具自动化测试学习总结_第108张图片
  3. Web持续集成中分层的自动化测试:
    前后端单元测试 —— 非集成测试
    Service层接口测试等——集成测试
    HTTP接口测试、Web自动化测试等——系统测试
    Java+Selenium工具自动化测试学习总结_第109张图片

如果大家想一起交流学习,共同进步,欢迎搜索公众号“是日前端”,输入关键词如:前端基础,获取资料,资料刚开始整理,目前还在完善中,点击交流群按钮进交流群,群里仅限技术交流、面试交流等,需要其它相关资料可以群里说,后续交流群人数增多会考虑特色内容,再次感谢大家的支持~

你可能感兴趣的:(测试,工具使用,mac,os,x,javascript,开发语言)