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

一、自动化测试

1. 什么是自动化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. Web自动化测试

在这里插入图片描述

3. 测试中自动化的应用

测试流程
在这里插入图片描述
在这里插入图片描述

二、selenium工具集

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、 Selenium工作流

在这里插入图片描述

  • 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自动化语法

在这里插入图片描述
在这里插入图片描述

1. Web元素定位语法

网易有道搜索 http://youdao.com/
在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

元素Class Name

	<element class="s-inpt">

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

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

如果页面中有多个input元素,则只会返回自上而下第一个元素
在这里插入图片描述

万物皆对象-WebElement

在这里插入图片描述
在这里插入图片描述
输入框元素(Text)
在这里插入图片描述
搜索按钮
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第二个例子

在这里插入图片描述
需求抽象出来的操作:
在这里插入图片描述
打开网址(get)
在这里插入图片描述

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

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

  • 使用方式
    在这里插入图片描述
  • 操作特性
    页面完全打开后,方法才结束
  • 注意事项
    不判断重定向后页面的打开情况
    输入内容(sendKeys)
    在这里插入图片描述
	Webelement element = driver.findElement(By.name("username"));
	element.sendKeys("autotest1@163.com");
	element.sendKeys("auto","test1","@163.com");

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

  • 使用对象
    在这里插入图片描述
  • 注意事项
    在原来输入内容后面追加输入
    点击元素(click)
    在这里插入图片描述
WebElement element = driver.findElement(By.className("js-cur"));
element.click();

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

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

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

  • 使用对象
    在这里插入图片描述
  • 注意事项
    整体清除,不是按一下退格的单个删除
    获取网址(getCurrentUrl)
    在这里插入图片描述
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)
    在这里插入图片描述
System.out.println(driver.getTitle());

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

  • 使用对象
    在这里插入图片描述
  • 注意事项
    如果不存在Title,则返回NULL
    获取文案(getText)
    在这里插入图片描述
WebElement element = driver.findElement(By.className("album"));

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

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

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

  • 注意事项
    测试结束后不关闭则常驻内存,导致内存溢出
    在这里插入图片描述
    在这里插入图片描述
XML与HTML
  • XML(eXtensilble Markup Language): 简称XML,可扩展标记语言
    在这里插入图片描述
  • HTML(HyperText Markup Language):超文本标记语言
    在这里插入图片描述
XPath
  • XPath:XML Path Language XML路径语言
  • XPath是一种查询语言,是一种用来确定XML文档中某部分位置的语言
    在这里插入图片描述
    XPath语法:绝对路径 /
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    XPath语法:模糊匹配路径 //
    在这里插入图片描述
XPath语法:父节点 …

在这里插入图片描述
XPath语法:指定顺序【?】
在这里插入图片描述
在这里插入图片描述
XPath语法:星号 *
在这里插入图片描述
在这里插入图片描述
XPath语法:元素属性 @
在这里插入图片描述
在这里插入图片描述
XPath语法:Text
在这里插入图片描述
推荐第二种
XPath语法: start-with()与contains()
在这里插入图片描述
在这里插入图片描述

XPath实战

  • 工具:FireFox插件 XPath Checker / Chrome插件 XPath helper
  • driver.findElement(By.xpath(“xpath”))
元素定位总结
  • 元素具有ID属性,优先使用ID定位
  • 其次使用name属性,但是需要确定是否是唯一
  • 定位链接元素时,考虑使用Link Text
  • 当其他定位方法准确定位时,可以使用XPath定位
  • XPath是通用的定位方法,但需要使用时注意XPath语法的稳定性
    在这里插入图片描述
    更推荐第二种方法:假如页面结构发生了变更,新增或删除了某个div节点,第一种定位方式就失效,而第二种定位方式只要id没有变化,就可以定位到这个元素

测试用例-验证云相册下载功能
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

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();

测试用例- 验证创建相册提示功能
在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

	Alert alert = driver.switchTo().alert();	
	alert.accept();
浏览器弹框操作(switchTo.alert)-经验总结

注意事项

  • 页面上出现了alert弹窗才可以使用switchTo.alert
  • 只有alert类型的弹窗才适用
  • 在alert弹窗消除之前,无法对页面上其他元素进行操作
测试用例- 验证创建相册提示功能

关键操作:

  • 切换到alert弹窗
  • 关闭该alert弹窗
	Alert alert = driver.switchTo().alert();	
	alert.accept() ;
测试用例- 验证相册自定义排序功能

在这里插入图片描述

元素拖拽操作(dragAndDrop)

在这里插入图片描述

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

在这里插入图片描述
关键操作:

  • 拖拽相册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();	
测试用例-验证删除相册功能

在这里插入图片描述

系统事件操作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

	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();
设置等待时间

方法一:隐式等待
在这里插入图片描述
在这里插入图片描述

  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自动化测试还缺少什么?
    在这里插入图片描述
    在这里插入图片描述

TestNG简介

- Next Generation Java Testing

安装Eclipse的TestNG插件

在这里插入图片描述

TestNG基础:注解(Annotation)

在这里插入图片描述

TestNG基础:验证(Assert)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

TestNG基础:报告

在这里插入图片描述

用例分析

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

测试退出(AfterClass)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

测试内容-验证点唯一

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述
Web自动化再进一步——可维护性封装

  • 云相册Web自动化测试用例:登录
    登录元素定位变更?
    登录多了确认框?
  • Page Object封装:martinfowler.com/bliki/PageObject.html
    在这里插入图片描述
    Web自动化再进一步——通用性封装
  • 一个测试用例Web、Android、IOS共同执行
  • 使用自然语言编写Web自动化测试用例
    在这里插入图片描述
Web自动化与持续集成
  1. 持续集成——Continuous Intergration
  • 持续的针对最新代码提交快速的完成集成、构建、测试的软件工程实践
  • 包含静态检查、自动测试等一系列自动化质量保障手段
    在这里插入图片描述
  1. 持续集成的威力:
  • 解决团队开发模式下代码集成困难
  • 更早的发现问题,更快的解决问题
  • 为每一次代码更新提供质量评估,为快速部署上线提供了可能
  1. 完善的Web持续集成体系
    在这里插入图片描述
  2. 持续集成与质量度量
    在这里插入图片描述
  3. Web持续集成中分层的自动化测试:
    前后端单元测试 —— 非集成测试
    Service层接口测试等——集成测试
    HTTP接口测试、Web自动化测试等——系统测试
    在这里插入图片描述

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

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值