自动化测试和selenium的使用_org,2024年最新不看绝对血亏

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注软件测试)
img

正文

操作测试对象

模拟手动从键盘输入

点击对象

获取页面文本

清除对象输入的文本内容

添加等待(三种方式)

强制等待sleep()

隐式等待

显式等待

弹窗处理

打印信息

浏览器操作

浏览器窗口大小设置

浏览器前进、后退和刷新 设置

键盘事件

鼠标事件

上传文件操作

屏幕截图

自动化测试面试题


自动化测试定义

自动化测试指软件测试的自动化,在预设状态下运行应用程序或者系统,预设条件包括正常和异常,最后评估运行结果。将人为驱动的测试行为转化为机器执行的过程

现在随着软件产品版本的迭代更新,需要对旧版本进行大量的回归测试,如果这都需要测试人员手工测试的话,会大大降低工作效率,因此就需要自动化测试来替代一部分人工测试。

自动化测试包括UI自动化,接口自动化,单元测试自动化

为什么选择selenium来作为我们web自动化测试的工具?

  1. 首先selenium是免费开源的。
  2. 支持多浏览器例如,chrome,firefox,edge,ie等。
  3. 支持多系统例如:Linux,windows,macos等。
  4. 支持多语言,例如java,python等。
  5. selenium提供了很多可使用的API。

自动化测试定位元素

对象的定位应该是自动化测试的核心,要想操作一个对象,首先应该识别这个对象。一个对象就是一个人一样,他会有各种的特征(属性),如比我们可以通过一个人的身份证号,姓名,或者他住在哪个街道、楼层、门牌找到这个人。

那么一个对象也有类似的属性,我们可以通过这些属性找到这对象。

1、在实际操作中,自动化测试定位元素时常用的是
CSS选择器
xpath方式

2、CSS选择器和xpath方式哪一个比较好?

答:
CSS选择器比较好,因此它的定位元素效率比xpath要高

使用cssSelector定位

CSS 使用选择器来为页面元素绑定属性,CSS 的比较灵活可以选择控件的任意属性,通过findElement(By.cssSelector())函数来使用。

CSS定位语法

id选择器:#id

类选择器:**.**class

标签选择器:标签

以百度输入框为例:

  1. 获取百度浏览器的网址:https://www.baidu.com/
  2. 找到百度输入框的cssSelector的定位元素(使用chrome的F12开发者模式,点击百度输入框,复制selector),输入关键词“迪丽热巴”
  3. 找到百度的点击按钮并点击

代码如下

package com.javazidonghau;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;
public class firstAutoTest {
//第一个简单的自动化示例
public void dilireba() throws InterruptedException {
//创建一个驱动对象来打开浏览器
ChromeDriver driver = new ChromeDriver();
Thread.sleep(3000);
//输入百度浏览器网站
driver.get(“https://www.baidu.com”);
Thread.sleep(3000);
//找到百度输入框,并输入关键词"迪丽热巴"
driver.findElement(By.cssSelector(“#kw”)).sendKeys(“迪丽热巴”);
Thread.sleep(3000);
//找到百度一下按钮,并点击
driver.findElement(By.cssSelector(“#su”)).click();
Thread.sleep(3000);
//释放掉驱动对象并关闭浏览器
driver.quit();
}
}

使用XPath 定位

xpath定位语法:

绝对路径:/html/head/title (绝对路径不常用)

相对路径:

相对路径+索引:l/form/span[1]/input

相对路径+属性值:l/input[@class=“s_ipt”]

相对路径+通配符://*[@*=“su”]

相对路径+文本匹配://a[text()=“新闻”]

//找到百度输入框,并输入关键词"杨洋"
driver.findElement(By.xpath(“//[@id=“kw”]“)).sendKeys(“杨洋”);
Thread.sleep(3000);
//找到百度一下按钮,并点击
driver.findElement(By.xpath(”//
[@id=“su”]”)).click();
Thread.sleep(3000);
//释放掉驱动对象并关闭浏览器
driver.quit();

操作测试对象

前面讲到了不少知识都是定位元素,定位只是第一步,定位之后需要对这个元素进行操作。是鼠标点击还是键盘输入,或者清除元素的内容,或者提交表单等。这个取决于定位元素需要进行的下一步操作。

web自动化测试中比较常用的操作对象的方法有下面几个:

  • sendKeys()     模拟手动从键盘输入
  • click()      点击对象
  • getText()     获取页面文本
  • clear()      
    清除对象输入的文本内容

模拟手动从键盘输入

driver.findElement(By.xpath(“//*[@id=“kw”]”)).sendKeys(“杨洋”);

sendKeys方法可以模拟我们用户从键盘输入

点击对象

driver.findElement(By.xpath(“//*[@id=“su”]”)).click();

click() 方法可以用于点击一个按钮

获取页面文本

String s1= driver.findElement(By.xpath(“//*[@id=“hotsearch-content-wrapper”]/li[1]/a/span[2]”)).getText();
System.out.println(s1);

getText()方法可以用来获取页面的文本信息,但不能获取定位元素的属性值,如果想要获取属性值就可以使用getAttribute(“value”)来进行获取 (value为想要获取属性内容的属性标签)

举例:获取百度热搜第一个文本页面

package com.javazidonghau;

import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;

public class firstAutoTest {
public void dilireba() throws InterruptedException {
//创建一个驱动对象来打开浏览器
ChromeDriver driver = new ChromeDriver();
Thread.sleep(3000);
//输入百度浏览器网站
driver.get(“https://www.baidu.com”);
//找到百度页面的对应文本的xpath定位
String s1= driver.findElement(By.xpath(“//*[@id=“hotsearch-content-wrapper”]/li[1]/a/span[2]”)).getText();
Thread.sleep(3000);
System.out.println(s1);
//释放掉驱动对象并关闭浏览器
driver.quit();
}
}

清除对象输入的文本内容

driver.findElement(By.xpath(“//*[@id=“kw”]”)).clear();

clear()可以清除输入框输入的文本信息

添加等待(三种方式)

强制等待sleep()

Thread.sleep(3000);//3000毫秒即3秒

sleep()表示设置一个固定的等待时间,如果我们的页面已经提前全部加载完毕,也必须等待固定设

置的时间才能进行下一步。如果涉及过多的测试用例,则会十分影响自动化测试效率。

举例:未设置等待时间发生异常

public class firstAutoTest {
//第一个简单的自动化示例
public void dilireba() throws InterruptedException {
//创建一个驱动对象来打开浏览器
ChromeDriver driver = new ChromeDriver();
//输入百度浏览器网站
driver.get(“https://www.baidu.com”);
//找到百度输入框,并输入关键词"杨洋"
driver.findElement(By.cssSelector(“#kw”)).sendKeys(“杨洋”);
driver.findElement(By.cssSelector(“#su”)).click();
//Thread.sleep(3000);
driver.findElement(By.cssSelector(“#\\34 > div > div:nth-child(1) > h3”));
//释放掉驱动对象并关闭浏览器
driver.quit();
}
}

当在输入和点击操作完成后,未设置一个等待时间又开始定位下一个元素,此时发现运行异常报错,报错原因是程序执行的速度很快,当上一个操作的页面渲染还没有结束,下一个操作又要开始定位元素导致未找到定位元素,于是发生异常。

解决方案:设置一个等待时间

public class firstAutoTest {
//第一个简单的自动化示例
public void dilireba() throws InterruptedException {
//创建一个驱动对象来打开浏览器
ChromeDriver driver = new ChromeDriver();
//输入百度浏览器网站
driver.get(“https://www.baidu.com”);
//找到百度输入框,并输入关键词"杨洋"
driver.findElement(By.cssSelector(“#kw”)).sendKeys(“杨洋”);
driver.findElement(By.cssSelector(“#su”)).click();
Thread.sleep(3000);//强制等待
driver.findElement(By.cssSelector(“#\\34 > div > div:nth-child(1) > h3”));
//释放掉驱动对象并关闭浏览器
driver.quit();
}
}

隐式等待

sleep()当遇到许多测试用例时,会大大降低测试效率,此时隐式等待的作用就比设置sleep()比较智能。隐式等待设置的等待时间范围内,必须等待整个页面加载完成然后再轮询等待条件的元素,如果元素出现之后就立即结束进行下一步,不需要等待时间结束。

隐式等待节省了大量的等待时间,元素展示之后,就可以直接执行下一步。如果在规定的时间范围内,元素仍然没有出现,则会抛出一个异常【NoSuchElementException】,停止运行

driver.manage().timeouts().implicitlyWait(Duration.ofMillis(3000));
public class firstAutoTest {
//第一个简单的自动化示例
public void dilireba() throws InterruptedException {
//创建一个驱动对象来打开浏览器
ChromeDriver driver = new ChromeDriver();
//输入百度浏览器网站
driver.get(“https://www.baidu.com”);
//找到百度输入框,并输入关键词"杨洋"
driver.findElement(By.cssSelector(“#kw”)).sendKeys(“杨洋”);
driver.findElement(By.cssSelector(“#su”)).click();
// Thread.sleep(3000); //强制等待
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(3000));//隐式等待
driver.findElement(By.cssSelector(“#\\34 > div > div:nth-child(1) > h3”));
//释放掉驱动对象并关闭浏览器
driver.quit();
}
}

显式等待

显示等待只需要等待指定条件是否出现,不需要等待整个页面元素是否全部加载完,此时若指定条件已经找到而整个页面还未加完,显示等待可以直接进行后续程序运行

显示等待与隐式等待区别:

1)显示等待可以针对某一确定指定条件进行等待,不用等待整个页面全部加载完

2)隐式等待不可以针对某一个指定条件进行等待,必须得等待整个页面加载完,找到等待元素出现才可执行后续程序

显示等待需要使用到 selenium 里中的一个类 ExpectedConditions,以及 until 方法。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
后续程序运行

显示等待与隐式等待区别:

1)显示等待可以针对某一确定指定条件进行等待,不用等待整个页面全部加载完

2)隐式等待不可以针对某一个指定条件进行等待,必须得等待整个页面加载完,找到等待元素出现才可执行后续程序

显示等待需要使用到 selenium 里中的一个类 ExpectedConditions,以及 until 方法。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
[外链图片转存中…(img-NvzfK6r0-1713597314810)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值