什么是自动化测试
将人工要做的测试化工作进行转换,让代码去执行测试工作。这样可以提高测试效率,提高测试产品的质量。
自动化分类:单元自动化测试、接口自动化测试、UI自动化测试
什么是selenium
做UI自动化测试的工具
为什么使用selenium?
1、免费,可以查看源码
2、支持各种浏览器
3、跨平台(Linux、Windows、Mac)
4、有丰富的API
selenium工作原理
三个角色:
1.自动化脚本代码(在idea中写的代码)
2.驱动:有了这个驱动后可以对页面进行操作
3.浏览器
使用Selenium IDE录制脚本
selenium环境搭建
windows电脑环境搭建-chrome浏览器
1.查看chrome浏览器版本
2.下载chrome浏览器驱动
https://chromedriver.chromium.org/downloads
把Chromediver.exe复制到Chrome浏览器所在的同级目录下
3.配置系统环境变量PATH
4.验证环境是否搭建成功
1.创建java项目,添加pom文件中添加依赖
<dependencies>
<!-- 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>
2.编写代码运行
public class Main {
public static void main(String[] args) {
//创建的驱动
WebDriver webDriver = new ChromeDriver();
//打开百度
webDriver.get("https://www.baidu.com");
}
}
selenium相关API
webdriver 提供了一系列的对象定位方法。
1.定位元素
CSS选择器定位
1、类选择器: .class值
2、id选择器:#id值
3、父类选择器 子类选择器:
父类选择器表达式 子类选择器表达式
4、标签选择器:
form、body....
public class Main {
public static void main(String[] args) {
//创建的驱动
WebDriver webDriver = new ChromeDriver();
//打开百度
webDriver.get("https://www.baidu.com");
//定位百度搜素框
//通过css选择器定位元素
WebElement search_input = webDriver.findElement(By.cssSelector(".s_ipt"));
if(search_input==null){
System.out.println("测试未通过!");
}else {
System.out.println("测试通过!");
}
//关闭浏览器
//quit关闭还删掉了浏览器中的cookie,删除更彻底(推荐)
webDriver.quit();
//close删除信息不彻底
//webDriver.close();
}
}
xpath定位元素
xpath和css一样,也是一个语法。
绝对路径:通过/开头
/html/body/div/div(不常用)
相对路径:通过//开头
1.相对路径+索引
2.相对路径+属性的值
3.相对路径+通配符
4.相对路径+文本匹配
//通过xpath定位元素
WebElement search_input=webDriver.findElement(By.xpath("//form/span[1]/input"));
css选择器和xpath的区别:css选择器的效率更高。
标签定位元素
//通过标签定位元素
WebElement search_input=webDriver.findElement(By.tagName("input"));
2.操作测试对象
webdriver 中比较常用的操作对象的方法有下面几个:
click :点击对象
send_keys :在对象上模拟按键输入
clear :清除对象输入的文本内容
submit :提交
text ::用于获取元素的文本信息
getAttribute:获取元素的属性值
举例:
private static void Test02() throws InterruptedException {
//创建一个浏览器的驱动
WebDriver webDriver = new ChromeDriver();
//打开百度首页
webDriver.get("https://www.baidu.com/");
//找到搜索输入框
WebElement search_input = webDriver.findElement(By.cssSelector("#kw"));
//向搜索输入框中输入”软件测试“
search_input.sendKeys("软件测试");
//找到百度一下
WebElement baidu_button = webDriver.findElement(By.cssSelector("#su"));
//点击百度一下
baidu_button.click();
sleep(3000);
//找到页面上所有关于“软件测试”的元素
List<WebElement> search_results = webDriver.findElements(By.cssSelector("a em"));
sleep(3000);
//遍历List
//如果元素文本等于软件测试,测试通过
//如果搜索结果中没有软件测试,测试不通过,否则测试通过
for (int i = 0; i < search_results.size(); i++) {
if (search_results.get(i).getText().equals("软件测试")) {
System.out.println("测试通过");
} else {
System.out.println("测试不通过");
}
}
}
private static void Test03() throws InterruptedException {
//创建驱动
WebDriver webDriver=new ChromeDriver();
//打开百度首页
webDriver.get("https://www.baidu.com");
//找到搜索输入框
WebElement search_input = webDriver.findElement(By.cssSelector("#kw"));
//向搜索输入框中输入”软件测试“
search_input.sendKeys("软件测试");
//找到搜索输入框
//清空百度输入框里面的内容
search_input.clear();
//向百度输入框中输入“前端”
search_input.sendKeys("前端");
//找到百度一下
WebElement baidu_button= webDriver.findElement(By.cssSelector("#su"));
//点击百度一下
baidu_button.click();
//校验结果有没有“前端”
int flag=0;
sleep(3000);
List<WebElement> search_results = webDriver.findElements(By.xpath("//font[text()=\"前端\"]"));
sleep(3000);
for (int i = 0; i < search_results.size(); i++) {
if (search_results.get(i).getText().equals("前端")) {
flag = 1;
break;
}
}
if(flag==1){
System.out.println("测试通过!");
}else{
System.out.println("测试不通过!");
}
}
click点击对象和submit提交之间的区别:
click方法主要用于触发元素上的点击事件,而submit方法主要用于提交表单数据。
submit操作的元素需要放到form标签中,否则会报错。click没有限制,推荐使用click。
3.添加等待
在网页自动化测试中,有时候会遇到代码执行速度比页面渲染速度快的情况。这可能会导致测试失败,因为测试代码尝试在页面还没有完全加载或渲染完成时对其进行操作。
解决这个问题的方法通常包括以下几点:
1.sleep( );
2、显式等待(Explicit Waits):在执行需要等待页面渲染的操作之前,使用显式等待来等待页面元素出现或特定条件满足。这样可以确保测试代码在操作页面元素之前等待页面完全加载和渲染完成。
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("elementId")));
3、隐式等待(Implicit Waits):在创建 WebDriver 实例时,设置一个全局的隐式等待时间,让 WebDriver 在查找元素时等待一定的时间。一般推荐使用隐式等待。
webDriver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
4.打印信息
1.获取title
private static void Test04() {
//创建驱动
WebDriver webDriver = new ChromeDriver();
//打开百度首页
webDriver.get("https://www.baidu.com");
//获取百度页面title
String title = webDriver.getTitle();
//如果获取的title等于“百度一下,你就知道”,测试通过
if (title.equals("百度一下,你就知道")) {
System.out.println("测试通过");
} else {
//否则测试不通过
System.out.println("测试不通过");
}
}
2.获取url
private static void Test05() {
//创建驱动
WebDriver webDriver = new ChromeDriver();
//打开百度首页
webDriver.get("https://www.baidu.com");
//获取百度页面url
String url = webDriver.getCurrentUrl();
//如果获取的url等于“https://www.baidu.com/”,测试通过
if (url.equals("https://www.baidu.com/")) {
System.out.println("测试通过");
} else {
//否则测试不通过
System.out.println("测试不通过");
}
}
5.浏览器的操作
1.浏览器最大化
webDriver.manage().window().maximize();
private static void Test06() throws InterruptedException {
//创建驱动
WebDriver webDriver = new ChromeDriver();
//打开百度首页
webDriver.get("https://www.baidu.com");
//浏览器最大化
webDriver.manage().window().maximize();
sleep(3000);
//定位到换一换这个元素
String expected_str=webDriver.findElement(By.cssSelector("#hotsearch-refresh-btn > span")).getText();
//如果获取的url等于“https://www.baidu.com/”,测试通过
if (expected_str.equals("换一换")) {
System.out.println("测试通过");
} else {
//否则测试不通过
System.out.println("测试不通过");
}
}
2.设计浏览器的大小
webDriver.manage().window().setSize(new Dimension(800,600)); # 设置宽度为800px,高度为600px
3.浏览器前进,后退
可以使用
back()
和
forward()
方法来实现浏览器的后退和前进操作
//浏览器退后
webDriver.navigate().back;
//浏览器前进
webDriver.navigate().forward;
4.操作浏览器滚动条
//滚动到浏览器最底下
((JavascriptExecutor) webDriver).executeScript("document.documentElement.scrollTop=1000");
6.键盘事件
1.回车 sendKeys(Keys.ENTER)
private static void Test07() {
//输入”蛋糕“并且按下回车
WebDriver webDriver=new ChromeDriver();
webDriver.get("https://www.baidu.com");
webDriver.findElement(By.cssSelector("kw")).sendKeys("蛋糕");
//在百度输入框按下enter键
webDriver.findElement(By.cssSelector("kw")).sendKeys(Keys.ENTER);
}
2.Ctrl+A、Ctrl+X(剪切)、Ctrl+V、Ctrl+C
通过SendKey()方法来实现的
// 创建 Actions 对象
Actions actions = new Actions(webDriver);
webDriver.findElement(By.cssSelector("kw")).sendKeys(Keys.CONTROL,"A");
webDriver.findElement(By.cssSelector("kw")).sendKeys(Keys.CONTROL,"X");
在 Selenium 中,perform方法用于执行之前在 Actions 对象上定义的所有操作。可以看见右击的执行效果。
7.切换窗口
在 Selenium 中,可以通过 WebDriver 的getWindowHandles()方法来获取当前会话中所有窗口的句柄,并通过switchTo().window()方法来切换到指定的窗口。
public class WindowHandleExample {
public static void main(String[] args) {
// 设置 Chrome 驱动程序路径
System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
// 实例化 ChromeDriver 对象
WebDriver driver = new ChromeDriver();
// 打开第一个页面
driver.get("https://www.example.com");
// 记录第一个页面的窗口句柄
String firstWindowHandle = driver.getWindowHandle();
// 打开新的页面(这里假设打开一个新的页面)
driver.get("https://www.example.com/new");
// 获取所有窗口的句柄
Set<String> windowHandles = driver.getWindowHandles();
// 遍历窗口句柄,找到新打开的窗口
for (String handle : windowHandles) {
if (!handle.equals(firstWindowHandle)) {
// 切换到新打开的窗口
driver.switchTo().window(handle);
break;
}
}
// 现在可以在新窗口中执行操作
// 切换回第一个页面
driver.switchTo().window(firstWindowHandle);
// 现在可以在第一个页面中执行操作
// 关闭浏览器
driver.quit();
}
}
版权归原作者 Roylelele 所有, 如有侵权,请联系我们删除。