自动化测试(selenium篇)

这次我们来介绍selenium 我们主要来讲解这几个要点

1.什么是自动化测试

2.什么是selenium

3.为什么来讲selenium

4.selenium的环境搭建

5.selenium的 API

1.什么是自动化测试

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

自动化测试包括UI自动化,接口自动化,单元测试自动化。按照这个金字塔模型来进行自动化测试规划,可以产生最佳的自贡话测试产出投入比(ROI),可以用较少的投入获得很好的收益。
 

1.单元自动化测试

最大的投入应该在单元测试上,单元测试运行的频率也更加高
 

2.接口自动化

接口测试就是API测试,相对于UI自动化API自动化更加容易实现,执行起来也更稳定。

接口自动化的有以下特点:

可在产品前期,接口完成后介入

用例维护量小

适合接口变动较小,界面变动频繁的项目

3.UI自动化

虽然测试金字塔告诉我们尽量多做API层的自动化测试,但是UI层的自动化测试更加贴近用户的需求和软件系统的实际业务。并且有时候我们不得不进行UI层的测试。
 

UI自动化的特点:

用例维护量大

页面相关性强,必须后期项目页面开发完成后介入

UI测试适合与界面变动较小的项目

UI自动化测试的好处

1.降低大型系统的由于变更或者多期开发引起的大量的回归测试的人力投入,这可能是自动化测试最主要的任务,特别是在程序修改比较频繁,效果是非常明显的,自动化测试前期人力投入较多,但后期进入维护期后,可节省大量人力,而手工测试后期需要增加大量人力用于回归测试
 

2.减少重复测试的时间,实现快速回归测试

3.创建优良可靠的测试过程,减少人为错误

4.可以运行更多更繁琐的测试

5.可以执行一些手工测试困难或不可能进行的测试

6.更好的利用资源

6.测试脚本的重用性

UI自动化测试的框架

UI层的测试框架比较多,比如Windows客户端测试的AutoIT,web测试的selenium以及TestPlant eggPlant,Robot framework,QTP等 我们这次主要讲selenium

selenium的主要特点

   免费,也不用再为破解软件而大伤脑筋

小巧,对于不同的语言它只是一个包而已,而QTP 需要下载安装1个多G 的程序。

这也是最重要的一点,不管你以前更熟悉C、java、ruby、python、或都是C# ,你都 可以通过selenium 完成自动化测试,而QTP 只支持VBS

支持多平台:windows、linux、MAC ,支持多浏览器:ie、ff、safari、opera、chrome

支持分布式测试用例的执行,可以把测试用例分布到不同的测试机器执行,相当于分 发机的功能

selenium的工作原理

工作原理里面有三个角色

1)自动化脚本代码(在各种编程软件里面写的代码)

2)驱动:有了驱动就可以对页面进行操作

3)浏览器

2.selenium配置(Selenium+Java环境搭建)

  1,下载chrome浏览器 并查看浏览器版本

        

2.下载chrome浏览器驱动

https://chromedriver.chromium.org/downloads

下载对应浏览器版本的驱动

如果是更高版本的浏览器,可以下载测试版本的驱动

3.配置环境变量path

解压下载好的驱动压缩包,将下载好的chromedriver.exe放到chrome浏览器安装路径下(如果是edge浏览器驱动那就将对应驱动放到edge浏览器安装路径下),这里以chrome浏览器驱动为例

举例:我的chrome浏览器安装路径是路径是C:\Program Files\Google\Chrome\Application

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.编写代码运行

import org.openqa.selenium.chrome.ChromeDriver;public class Main {public static void main(String[] args) {WebDriver webDriver = new ChromeDriver();webDriver.get("https://www.baidu.com");}
}

如果打开了浏览器 说明配置成功

3.webdriver API

        1.元素的定位

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

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

        webdriver 提供了一系列的对象定位方法,常用的有以下几种

                 id,name,class name, link text ,partial link text,

                   tag name, xpath ,css selector

           1.css选择器定位元素

           CSS(Cascading Style Sheets)是一种语言,它被用来描述HTML 和XML 文档的表现

        CSS 使用选择器来为页面元素绑定属性。这些选择器可以被selenium 用作另外的定位策略

                        CSS 的比较灵活可以选择控件的任意属性,上面的例子中:

                        类选择器:.class值(.s_ipt)

                        id选择器:#id值(#id)

                        父类选择器 子类选择器:

                        父类选择器表达式 子类选择器表达式 (#s_kw_wrap #kw)

                        标签选择器:标签名(form)


                        find_element_by_css_selector("#kw")

                通过find_element_by_css_selector( )函数,选择取百度输入框的id 属性来定义 

                CSS的获取可以用chrome的F12开发者模式中Element-右键-copy-copy selector来获取

                通过代码如何定位如下

                        

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;public class Main {public static void main(String[] args) {//创建一个驱动WebDriver webDriver = new ChromeDriver();//打开百度首页webDriver.get("https://www.baidu.com");//定位百度搜索框WebElement search_input= webDriver.findElement(By.cssSelector(".s_ipt"));if(search_input==null){System.out.println("测试不通过");}else {System.out.println("测试通过");}}
}

                        2.xpath定位元素(xpath是一种语法)

                XPath 是一种在XML 文档中定位元素的语言。因为HTML 可以看做XML 的一种实现,                       所 以selenium 用户可是使用这种强大语言在web 应用中定位元素。

                                绝对路径:

                   

                                相对路径:通过//开头

                      

                        但是我们有一个很强大的功能

就不需要写路径         

                        我们通过代码怎么定位标签呢

                        假如我们要定位百度的搜索框,我们通过css选择器定位元素,代码如下                 

   假如我们要通过xpath进行定位 代码如下

   3.标签定位元素

        代码如下              

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;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"));//通过xpath定位
//        WebElement search_input=webDriver.findElement(By.xpath("//form/span[1]/input"));//通过标签定位WebElement search_input= webDriver.findElement(By.tagName("input"));if(search_input==null){System.out.println("测试不通过");}else {System.out.println("测试通过");}}
}

4.close和qiut的区别

        close方法关闭当前的浏览器窗口,quit方法不仅关闭窗口,还会彻底的退出webdriver,释放  与driver server之间的连接。所以简单来说quit是更加彻底的close,quit会更好的释放资源

4.操作测试对象

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

                webdriver 中比较常用的操作对象的方法有下面几个:

                                click 点击对象

                                send_keys 在对象上模拟按键输入

                                 clear 清除对象输入的文本内容

                                  submit 提交

                                text 用于获取元素的文本信息

  1.submit和click的区别

                submit操作元素需要放到form标签中,否则会报错

                click没有任何限制 两个都是提交,所以推荐使用click

2.添加等待

        我们添加等待有两种方式

                  1)添加强制等待

                        就是我们熟知的sleep函数。

                  2)添加智能等待

                        1.添加隐式等待

                        

        隐式地等待并非一个固定的等待时间,当脚本执行到某个元素定位时,如果元素可以定位,则继续执行;如果元素定位不到,则它以轮询的方式不断的判断元素是否被定位到。直到超出设置的时长

                        2.添加显式等待 

                        

                推荐使用隐式等待

3.获取对应的元素的属性值

        假如我们进入百度主页想要拿到“百度一下”这四个字 我们就可以用

4.打印元素相关的信息

                a)获取title

                

                b)获取url

                

4.浏览器操作

                1.浏览器最大化

                

                2.设置浏览器的高和宽

                3.操作浏览器的前进、后退

                4.控制浏览器滚动条

5.键盘事件

     1.键盘按键写法

上图得知有很多种写法

                2.键盘组合玩法

                

        3.鼠标点击效果

6.各种 定位问题

                1.如何切换窗口

                

2.如何截图

        

 private static void test18() throws InterruptedException, IOException {//创建驱动WebDriver webDriver=new ChromeDriver();//打开百度首页webDriver.get("https://www.baidu.com/");//搜索webDriver.findElement(By.cssSelector("#kw")).sendKeys("NBA");sleep(3000);webDriver.findElement(By.cssSelector("#su")).click();sleep(3000);//把截的图放到一个file的临时变量中File file = ((TakesScreenshot) webDriver).getScreenshotAs(OutputType.FILE);//把file保存到磁盘中FileUtils.copyFile(file,new File("E:\\JAVA资料\\测试开发\\测试截图.png"));webDriver.quit();

          3.定位一组元素

                        我们准备以下的界面

我们想选中以下的框框并且打上勾

代码如下

private static void page01() {WebDriver webDriver=new ChromeDriver();webDriver.get("http://localhost:63342/AutoTest/AutoTest/src/main/java/Page/test01.html?_ijt=j55dl0o8r5hc3dmb8thppknvno&_ij_reload=RELOAD_ON_SAVE");List<WebElement>webElements= webDriver.findElements(By.cssSelector("input"));for (int i = 0; i <webElements.size() ; i++) {if(webElements.get(i).getAttribute("type").equals("checkbox")){webElements.get(i).click();}}}

4.定位下拉框选项

        

如图所示,我们有标签有下拉的选择值,如何选取

  第一种方式:我们通过Select来进行选择

第二种方式:

                

        我们看源码可以看到,value都有对应的值,我们也可以通过选择他来进行选择

                     

 private static void page03() throws InterruptedException {//创建驱动WebDriver webDriver=new ChromeDriver();//打开目标页面webDriver.get("http://localhost:63342/AutoTest/AutoTest/src/main/java/Page/test03.html?_ijt=flr8rs36dv1gegdfd78t1f2ml5&_ij_reload=RELOAD_ON_SAVE");//借助Select对象WebElement webElement=webDriver.findElement(By.cssSelector("#ShippingMethod"));Select select=new Select(webElement);//这是第一种方式//通过序号来选中你对应的对象,下标和学习的数组是一样的,下标是从0开始select.deselectByIndex(1);//第二种方式,通过选择value来进行定位select.selectByValue("9.25");sleep(3000);}

5.定位弹窗

 如图所示,我们点击“这是一个窗口过”过后,会出现一个弹窗

我们如何选中这个弹窗呢

  private static void page04() throws InterruptedException {//创建一个驱动//WebDriver webDriver=new ChromeDriver();webDriver.get("http://localhost:63342/AutoTest/AutoTest/src/main/java/Page/test04.html?_ijt=7th69i43ph8qt2mobiltoi1o44&_ij_reload=RELOAD_ON_SAVE");sleep(3000);//找到弹窗点击它webDriver.findElement(By.cssSelector("body > button")).click();sleep(3000);//取消点击webDriver.switchTo().alert().dismiss();//找到弹窗,点击它webDriver.findElement(By.cssSelector("body > button")).click();sleep(3000);String name="秋殇大大";//弹窗里面输入秋殇大大webDriver.switchTo().alert().sendKeys(name);sleep(3000);//弹窗确认webDriver.switchTo().alert().accept();sleep(3000);String text=webDriver.findElement(By.cssSelector("body > div:nth-child(5)")).getText();if(text.equals(name)){System.out.println("测试通过");}else {System.out.println("测试不通过");}}

6.上传文件操作

 private static void page05() throws InterruptedException {//创建一个驱动WebDriver webDriver=new ChromeDriver();//打开目标页面webDriver.get("http://localhost:63342/AutoTest/AutoTest/src/main/java/Page/test05.html?_ijt=f5vqj2o6f0ttbu22j5627j8sbc&_ij_reload=RELOAD_ON_SAVE");sleep(3000);//上传文件webDriver.findElement(By.cssSelector("body > input[type=file]")).sendKeys("E:\\JAVA资料\\测试开发\\测试截图.png");}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/812486.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝宝石衬底材料具有广阔消费市场 行业景气度良好

蓝宝石衬底材料具有广阔消费市场 行业景气度良好 衬底是由半导体单晶材料制造而成的晶圆片&#xff0c;既可以直接进入晶圆制造环节生产半导体器件&#xff0c;也可以进行外延工艺加工生产外延片&#xff0c;是电子元件的主体结构和支撑载体。蓝宝石衬底材料具有良好的透光性、…

burpsuite最新版2024.3.1安装

burpsuite最新版安装 环境 windows jdk22 BurpLoaderKeygen.jar burpsuite profression 2024.3.1 链接 链接&#xff1a;https://pan.baidu.com/s/1N6nggZZezg8y1FHpgwJmeg 提取码&#xff1a;n6uqjdk以及破戒方式这里不做介绍 注意事项 使用BurpLoaderKeygen.jar 破解之后…

Windows 2003 R2与Windows 2022建立域信任报错:本地安全机构无法跟域控制器获得RPC连接。请检查名称是否可以解析,服务器是否可用。

在Windows Server 2003 R2与Windows Server 2022之间建立域信任时遇到“本地安全机构无法与域控制器获得RPC连接”的错误&#xff0c;可能是由于以下几种原因&#xff1a; DNS 解析问题&#xff1a; 确保源域和目标域的DNS配置正确&#xff0c;能够互相解析对方的域名和IP地址。…

多语言婚恋交友APP开发流程一览

近年来&#xff0c;随着全球化的发展和人们对跨文化交流的需求增加&#xff0c;多语言婚恋交友APP的需求逐渐增长。开发这类APP需要考虑到不同语言和文化下用户的需求&#xff0c;涉及到一系列独特的流程和挑战。本文将从专家角度为您解析多语言婚恋交友APP的开发流程&#xff…

【虚幻引擎】DTProjectSettings 蓝图获取基本项目配置插件使用说明 获取项目命名,项目版本,公司名,公司识别名,主页,联系方式

本插件可以使用蓝图获取到项目的一些基本配置&#xff0c;如获取&#xff1a;公司名、公司识别名、版权声明、描述、主页、许可条款、隐私政策、项目ID、项目命名、项目版本、支持联系方式、项目显示标题、项目调试标题信息、应保留窗口宽高比、使用无边框窗口、以VR启动、允许…

【Vue3进阶】- 第2学堂小商城项目后端准备和接口文档

简介 在大多数前端项目开发中&#xff0c;都需要与后端进行接口交互&#xff0c;后端通常会以文档的形式提供接口信息&#xff0c;前端开发者通过阅读这些文档&#xff0c;了解后端接口的功能和使用方法&#xff0c;从而实现数据的获取和提交等功能。 第二学堂小商城教程后端…

03攻防世界-unserialize3

根据题目可以看出&#xff0c;这是个反序列化的题目 打开网址观察题目可以看到这里是php的代码&#xff0c;那么也就是php的反序列化 本题需要利用反序列化字符串来进行解题&#xff0c;根据源码提示我们需要构造code。 序列化的意思是&#xff1a;是将变量转换为可保存或传输…

MongoDB爬虫:(某扑)实战

https://bbs.hupu.com/bxj网页地址: https://bbs.hupu.com/bxj 然后我们在网页上定义帖子名称、帖子链接、创建时间、回复数、最后回复用户...... 除此之外,我们发现虎扑步行街最多显示的页数(20): 、 当我们打开第3页的时候,网页的URL的地址变为了:https://bbs.hupu.…

vmware虚拟机进不去系统补救

更新了虚拟机里面工具和资料&#xff0c;进行了磁盘整理和压缩&#xff0c;虚拟机运行进不去系统了。 网站找的修复方法均不可行。补救措施&#xff1a;利用DiskGenius.exe&#xff08;要用高版本不然复制的时候就知道了&#xff09; DG1342.rar - 蓝奏云 加载虚拟硬盘 2008x…

Rocky(Centos)数据库等高并发或高io应用linux系统调优,及硬件问题排查(含网络、磁盘、系统监控)

一、系统参数优化 默认的最大打开文件数是1024.不满足生产环境的要求。按照如下配置&#xff1a; 1、修改 systemctl管理的 servie 资源限制 编辑/etc/systemd/system.conf # 全局的打开文件数 DefaultLimitNOFILE2097152 # 全局打开进程数 DefaultLimitNPROC655352、调整系…

文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《基于分解算法与元学习结合的综合能源系统负荷预测》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

Vue.js组件精讲 第2章 基础:Vue.js组件的三个API:prop、event、slot

如果您已经对 Vue.js 组件的基础用法了如指掌&#xff0c;可以跳过本小节&#xff0c;不过当做复习稍读一下也无妨。 组件的构成 一个再复杂的组件&#xff0c;都是由三部分组成的&#xff1a;prop、event、slot&#xff0c;它们构成了 Vue.js 组件的 API。如果你开发的是一个…

科研学习|可视化——Origin绘制相关性系数矩阵

一、Origin软件版本 Origin2021版本 二、插件下载地址 CorrelationPlot.opx资源-CSDN文库 三、插件安装步骤 从上述链接下载插件将插件解压缩&#xff08;最好是解压缩到orgin的安装目录&#xff09;用origin打开插件&#xff08;或者打开origin&#xff0c;将插件拖拽到origin…

STL--vector

目录 【本节目标】 1.vector的介绍及使用 1.1 vector的介绍 1.2 vector的使用及底层模拟实现 vector类中成员变量 1.2.1 vector的定义 1.2.2 vector iterator 的使用 1.2.3 vector 空间增长问题 1.2.3 vector 增删查改 1.2.4 vector 迭代器失效问题 1.2.5 使用memcp…

git工具上传文件超过100MB解决方法

Github 上传超过100M的大文件 - 简书 (jianshu.com) 看到一个不错的贴子。 29660DESKTOP-CAB6SQB MINGW64 /d/predict-system $ git init Initialized empty Git repository in D:/predict-system/.git/29660DESKTOP-CAB6SQB MINGW64 /d/predict-system (master) $ git lfs tr…

基于java+springboot+vue实现的居家养老健康管理系统(文末源码+Lw)23-313

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装智慧社区居家养老健康管理系统软件来发挥其高效地信息处理…

设计模式-享元模式(Flyweight)

1. 概念 享元模式是一种结构型设计模式&#xff0c;它通过共享技术有效地支持大量细粒度对象的复用。 2. 原理结构图 图1 图2 2. 1 角色 抽象享元&#xff08;Flyweight&#xff09;&#xff1a;这是所有具体享元类的基类&#xff0c;它定义了享元对象的内部状态和外部状…

java快速幂算法

快速幂算法 参考视频(参考五角七边up大佬&#xff09; 幂运算的介绍 幂运算是指将一个数自身乘以自身多次的运算&#xff0c;其表达式为 a n a^n an&#xff0c;其中 a a a 是底数&#xff0c; n n n 是指数。 快速幂解释 快速幂算法是一种用于快速计算幂运算的算法&…

[当人工智能遇上安全] 13.威胁情报实体识别 (3)利用keras构建CNN-BiLSTM-ATT-CRF实体识别模型

《当人工智能遇上安全》系列将详细介绍人工智能与安全相关的论文、实践&#xff0c;并分享各种案例&#xff0c;涉及恶意代码检测、恶意请求识别、入侵检测、对抗样本等等。只想更好地帮助初学者&#xff0c;更加成体系的分享新知识。该系列文章会更加聚焦&#xff0c;更加学术…

Unity中支持泰语--没有版权限制

在Unity中支持泰语主要涉及以下几个方面&#xff1a; 选择合适的字体&#xff1a;在Unity中&#xff0c;确保使用支持泰文字符的字体是至关重要的。例如&#xff0c;可以选择使用Noto Serif Thai字体&#xff0c;这是一个支持泰语的字体2。 处理Unity版本问题&#xff1a;某些…