自动化测试(selenium篇)

news2024/11/28 0:38:49

这次我们来介绍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.coloradmin.cn/o/1590406.html

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

相关文章

Android Studio 使用Flutter开发第一个Web页面(进行中)

附上Flutter官方文档 1、新建Flutter项目&#xff08;需要勾选web选项&#xff09; 新建项目构成为&#xff1a; 2、配置 Flutter 使用 path 策略 官方文档 在main.dart中&#xff0c;需要导入flutter_web_plugins/url_strategy.dart包&#xff0c;并在main(){}函数中usePath…

水经微图IOS版5.2.0发布

随时随地&#xff0c;微图一下&#xff01; 水经微图&#xff08;简称“微图”&#xff09;IOS新版已上线。 在该版本中主要新增图层树节点排序功能、常规&#xff08;矩形、圆、椭圆、扇形&#xff09;绘制功能、地形夸张等主要功能。 当前版本 当前版本号为&#xff1a;5…

html-蜘蛛

<!doctype html> <html> <head> <meta charset"utf-8"> <title>彩虹蜘蛛-jq22.com</title> <script src"http://www.jq22.com/jquery/jquery-1.10.2.js"></script> <style> </style> </he…

Day:007(2) | Python爬虫:高效数据抓取的编程技术(scrapy框架使用)

Scrapy 数据的提取 Scrapy有自己的数据提取机制。它们被称为选择器。我们可以通过使用的选择器re、xpath、css提取数据 提示 不用再安装与引入Xpath,BS4 获得选择器 Response对象获取 正常使用 response.selector.xpath(//span/text()).get() response.selector.css(span::…

flask毕业设计选题管理系统python+django_96r19

本系统选择编程语言。Pymysql是封装了MySQL驱动的Python驱动一个能使Python连接到MySQL的库。Python语言官方规范访问数据库的统一接口规范(Python DB-API)&#xff0c;防止在使用不同数据库时&#xff0c;由于底层数据库技术不同造成接口程序紊乱的问题。通过本次系统设计可以…

处理json文件,并将数据汇总至Excel表格

从scores.jason文件中读取学生信息,输出学生的学号&#xff0c;姓名&#xff0c;各科成绩&#xff0c;平均分, 各科标准差 效果&#xff1a; # # 从scores.jason文件中读取学生信息,输出学生的学号&#xff0c;姓名&#xff0c;各科成绩&#xff0c;平均分, 各科标准差 impor…

K8S哲学 - 常见的资源类型

资源类型 namespace kubectl apply 和 kubectl create kubectl apply是声明式的 和 kubectl create是命令式的对吗 deployment 和 job的区别 k8s 的 lable 的意义

政安晨:【Keras机器学习实践要点】(二十七)—— 使用感知器进行图像分类

目录 简介 设置 准备数据 配置超参数 使用数据增强 实施前馈网络&#xff08;FFN&#xff09; 将创建修补程序作为一个层 实施补丁编码层 建立感知器模型 变换器模块 感知器模型 编译、培训和评估模式 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍…

RREA论文阅读

Relational Reflection Entity Alignment 关系反射实体对齐 ABSTRACT 实体对齐旨在识别来自不同知识图谱(KG)的等效实体对&#xff0c;这对于集成多源知识图谱至关重要。最近&#xff0c;随着 GNN 在实体对齐中的引入&#xff0c;近期模型的架构变得越来越复杂。我们甚至在这…

STM32—DMA直接存储器访问详解

DMA——直接存储器访问 DMA&#xff1a;Data Memory Access, 直接存储器访问。 DMA和我们之前学过的串口、GPIO都是类似的&#xff0c;都是STM32中的一个外设。串口是用来发送通信数据的&#xff0c;而DMA则是用来把数据从一个地方搬到另一个地方&#xff0c;而且不占用CPU。…

2024年经济发展、社会科学与贸易国际会议(ICEDSST2024)

2024年经济发展、社会科学与贸易国际会议(ICEDSST2024) 会议简介 2024年国际经济发展、社会科学与贸易会议&#xff08;ICEDSST2024&#xff09;将在中国深圳举行&#xff0c;主题为“经济发展、社科与贸易”。ICEDSST2024汇集了来自世界各地经济发展、社科与贸易领域的学者、…

Ubuntu无网络标识的解决方法

1.出现的情况的特点 2.解决办法 2.1 进入root并输入密码 sudo su 2.2 更新NetworkManager的配置 得先有gedit或者vim&#xff0c;两个随意一个&#xff0c;这里用的gedit&#xff0c;没有就先弄gedit&#xff0c;有的话直接下一步 apt-get install gedit 或者vim apt-get ins…

Vim:强大的文本编辑器

文章目录 Vim&#xff1a;强大的文本编辑器Vim的模式命令模式常用操作光标移动文本编辑查找和替换 底行命令模式常用操作Vim的多窗口操作批量注释与去注释Vim插件推荐&#xff1a;vimforcpp结论 Vim&#xff1a;强大的文本编辑器 Vim&#xff0c;代表 Vi IMproved&#xff0c;…

基于小程序实现的医院预约挂号系统

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;spring…

Android网络抓包--Charles

一、Android抓包方式 对Https降级进行抓包&#xff0c;降级成Http使用抓包工具对Https进行抓包 二、常用的抓包工具 wireshark&#xff1a;侧重于TCP、UDP传输层&#xff0c;HTTP/HTTPS也能抓包&#xff0c;但不能解密HTTPS报文。比较复杂fiddler&#xff1a;支持HTTP/HTTPS…

Swift Zulian Tiger

Swift Zulian Tiger 迅捷祖利安猛虎 16万金&#xff08;游戏币&#xff09; 1万金大概就能兑换460元~600元之间&#xff0c;6400元-9600元&#xff0c;汗颜 故事的一天刚打完BWL&#xff0c;才125金&#xff08;游戏币&#xff09; 本来想下线的结果他们说你太黑了&…

工控 modbusTCP 报文

Tx 发送报文:00 C9 00 00 00 06 01 03 00 00 00 02 Rx 接收报文:00 C9 00 00 00 07 01 03 04 01 4D 00 01 Tx 发送报文:00 C9 00 00 00 06 01 03 00 00 00 02 00 C9 事务处理标识符 2字节 00 00 协议标识符 2字节 固定 00 00 00 06 长度 2字节 表示之后的字节总数 &#xff08;…

贪心算法|968.监控二叉树

力扣题目链接 class Solution { private:int result;int traversal(TreeNode* cur) {// 空节点&#xff0c;该节点有覆盖if (cur NULL) return 2;int left traversal(cur->left); // 左int right traversal(cur->right); // 右// 情况1// 左右节点都有覆盖if (le…

MariaDB介绍和安装

MariaDB介绍和安装 文章目录 MariaDB介绍和安装1.MariaDB介绍2.MariaDB安装2.1 主机初始化2.1.1 设置网卡名和ip地址2.1.2 配置镜像源2.1.3 关闭防火墙2.1.4 禁用SELinux2.1.5 设置时区 2.2 包安装2.2.1 Rocky和CentOS 安装 MariaDB2.2.2 Ubuntu 安装 MariaDB 2.3 源码安装2.3.…

紫光展锐携手中国联通智慧矿山军团(山西)完成RedCap现网环境测试

近日&#xff0c;紫光展锐与中国联通智慧矿山军团&#xff08;山西&#xff09;在现网环境下成功完成了RedCap技术测试。此次测试对搭载紫光展锐RedCap芯片平台V517的模组注网速度和信号情况、Iperf打流测试上下行情况、ping包延时情况以及模组拨号入网压测等项目进行了全面验证…