自动化测试(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");
    }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

快速掌握缓存技术:学习多个缓存供应商(ehcache,redis,memcached,jetcache,j2cache)

缓存技术 缓存模拟缓存Spring缓存技术第三方缓存技术Ehcache缓存供应Redis缓存memcached缓存&#xff08;国内&#xff09; jetcache缓存供应商jetcache的基本使用设置外部服务设置本地服务 jetcache方法缓存j2cache 缓存 什么是缓存 缓存是一种介于数据永久存储介质与数据应用…

【U8+】打开固定资产卡片提示:运行时错误‘91’,未设置对象变量或with block变量。

【问题描述】 用友U8软件&#xff0c;固定资产模中打开某张卡片后&#xff0c; 提示&#xff1a;运行时错误‘91’&#xff0c;未设置对象变量或with block变量。 Ps&#xff1a;但不是所有卡片打开的时候都会提示&#xff0c;有的正常。 【解决方法】 跟踪数据库后&#xff…

【高效开发工具系列】obsutil安装与使用

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

SpringBoot工程快速构建

一、构建流程 1.创建Maven项目 2.导入SpringBoot起步依赖 3.定义Controller 4.编写引导类 5.启动测试 二、使用idea快速构建 1.创建SpringBoot模块 2.勾选依赖 3.定义Controller 4.启动测试

Angular 使用DomSanitizer防范跨站脚本攻击

跨站脚本Cross-site scripting 简称XSS&#xff0c;是代码注入的一种&#xff0c;是一种网站应用程序的安全漏洞攻击。它允许恶意用户将代码注入到网页上&#xff0c;其他用户在使用网页时就会收到影响&#xff0c;这类攻击通常包含了HTML和用户端脚本语言&#xff08;JS&…

【vue】用vite创建vue项目

前置要求 要有Node.js 1. 用vite创建vue项目 在cmd中&#xff0c;进入一个文件夹 在文件资源管理器上面的文件目录中&#xff0c;输入cmd&#xff0c;回车在cmd中通过cd命令进入对应文件夹 创建项目 npm create vitelatest # 创建项目创建项目过程中的一些选项 Ok to pro…

MyBatis源码介绍

文章目录 MyBatis的核心流程介绍SqlSessionFactory的理解MyBatis中的Executor的源码理解Spring中是如何解决MySQL的SqlSession的线程安全问题MyBatis面向Mapper编程工作原理Mybatis动态sql执行原理Mybatis的一级、二级缓存实现原理Mybatis的插件运行原理以及如何编写一个插件my…

【力扣】142. 环形链表 II

142. 环形链表 II 题目描述 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&am…

Filebeat+Kafka+ELK 的服务部署

一. kafka 架构深入 1.1 Kafka 工作流程及文件存储机制 Kafka 中消息是以 topic 进行分类的&#xff0c;生产者生产消息&#xff0c;消费者消费消息&#xff0c;都是面向 topic 的。 topic 是逻辑上的概念&#xff0c;而 partition 是物理上的概念&#xff0c;每个 partit…

javaScript设计模式之简单工厂模式

简单工厂模式(Simple Factory):又叫静态工厂方法&#xff0c;由一个工厂对象决定创建某一种产品对象类的实例。主要用来创建同一类对象。 场景一 假设我们需要计算圆形和矩形的面积 function Circle(radius) {this.radius radius;}Circle.prototype.getArea function() {re…

[Win11·Copilot] Win11 系统更新重启后任务栏 Copilot 图标突然消失 | 解决方案

文章目录 前言Copilot介绍产生异常的原因解决方案总结 前言 在 Windows 11 的最新系统更新之后&#xff0c;一些用户报告了任务栏中 Copilot 图标消失的问题。这篇技术博文将为您提供详细的解决方案&#xff0c;帮助您恢复 Copilot 图标&#xff0c;并确保您能够继续享受 Copi…

设计模式——迭代器模式15

迭代器模式提供一种方法访问一个容器对象中各个元素&#xff0c;而又不需暴露该对象的内部细节。 设计模式&#xff0c;一定要敲代码理解 抽象迭代器 /*** 迭代抽象* */ public interface Iterator<A> {A next();boolean hasNext(); }迭代器实现 /*** author ggbond*…

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…

2024年mathorcup数学建模C题思路分析-物流网络分拣中心货量预测及人员排班

# 1 赛题 C 题 物流网络分拣中心货量预测及人员排班 电商物流网络在订单履约中由多个环节组成&#xff0c;图 ’ 是一个简化的物流 网络示意图。其中&#xff0c;分拣中心作为网络的中间环节&#xff0c;需要将包裹按照不同 流向进行分拣并发往下一个场地&#xff0c;最终使包裹…

BERT论文解读及情感分类实战

文章目录 简介BERT文章主要贡献BERT模型架构技术细节任务1 Masked LM&#xff08;MLM&#xff09;任务2 Next Sentence Prediction (NSP)模型输入 下游任务微调GLUE数据集SQuAD v1.1 和 v2.0NER 情感分类实战IMDB影评情感数据集数据集构建模型构建超参数设置训练结果注意事项 简…

重生奇迹MU圣导师与弓箭手职业对比

职业定位对比 在职业定位上&#xff0c;弓箭手是一个远程物理输出职业&#xff0c;不过弓箭手也有一定的辅助能力&#xff0c;可以为队友提供控场效果&#xff0c;还能为队友提供一个攻击力加成BUFF。同时弓箭手也是一个非常需要操作的职业&#xff0c;想要玩好这个职业&#…

Springboot整合mybatis_plus + redis(使用原生的方式)

首次&#xff0c;创建一个springboot项目&#xff0c;勾选相应的依赖Lombok、Web 添加依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>…

SpringBoot-自定义Starter精华版

SpringBoot自定义Starter精华版 一、自定义 Starter 分析 项目首先加载 starter,starter加载自动配置类&#xff0c;然后再通过配置绑定对象读取配置属性&#xff0c;注册组件。 二、实现步骤 ​ 开发的自定义 Starter 需求是&#xff0c;项目依赖starterTest-spring-boot-s…

C++界面设计之道:利用Qt框架构建优雅高效的应用程序

引言 Qt是一款强大的跨平台C图形用户界面&#xff08;GUI&#xff09;应用程序开发框架&#xff0c;以其丰富的功能、高效的性能、优雅的API以及出色的跨平台能力深受开发者喜爱。本篇文章将以《C界面如何设计Qt程序&#xff1f;》为主题&#xff0c;详细介绍如何利用Qt框架设…

python路径不对安装不了pip文件

因为特殊原因改变了路径&#xff0c;所以原来安装的路径不对无法通过环境变量的改变来完成安装&#xff0c;解决方法&#xff1a; 1.卸载重新安装&#xff0c;在安装界面会出现一个界面&#xff0c;直接打勾&#xff0c;安装结束后路径会配置完成 2在环境变量与用户变量处键入…