【软件测试】关于Web自动化测试

文章目录

  • 🍃前言
  • 🌲如何实现Web自动化
    • 🚩安装驱动管理
    • 🚩Selenium库的安装
  • 🌳自动化常用函数
    • 🚩元素的定位
      • 🎈cssSelector
      • 🎈xpath
    • 🚩操作测试对象
      • 🎈点击/提交对象—click()
      • 🎈模拟按键输⼊—sendKeys("")
      • 🎈清除文本内容—clear()
      • 🎈获取文本信息—getText()
      • 🎈获取属性值
      • 🎈获取当前页⾯标题
      • 🎈获取当前页⾯URL
    • 🚩窗口
      • 🎈获取当前页面句柄:
      • 🎈获取所有页面句柄:
      • 🎈切换当前句柄为最新页面
      • 🎈窗口设置大小
      • 🎈窗口切换
      • 🎈屏幕截图
      • 🎈关闭窗口
    • 🚩等待
      • 🎈强制等待
      • 🎈隐式等待
      • 🎈显示等待
    • 🚩浏览器导航
      • 🎈打开网站
      • 🎈浏览器的前进、后退、刷新
    • 🚩弹窗
      • 🎈警告弹窗+确认弹窗
      • 🎈提示弹窗
    • 🚩文件上传
  • ⭕总结

🍃前言

本篇文章将带你领略一下Web自动化测试的魅力,展示一些常见的Web自动化测试常用的函数。

使用的浏览器是 Chrome 浏览器,IDEA编译器,与 Selenium 测试工具

🌲如何实现Web自动化

首先呢,我们Web测试测试前提是需要打开浏览器,通过访问web服务器来对服务器界面进行⼀系列的操作。

对于与手工测试来说,这⼀系列的操作都需要测试⼈员⼿动的,⼀步⼀步的来执行测试。

那么对于自动化动化程序来说,程序如何才能打开浏览器并执行我们预期的操作流程呢?

驱动⼀词应用广泛,同学们都不会陌生

车有了驱动才可以跑起来,计算机有了驱动程序才可以与设备进行通信。

🚩安装驱动管理

WebDriverManager是⼀个开源Java库,以完全⾃动化的⽅式对Selenium WebDriver所需的驱动程序(如chromedriver、geckodriver、msedgedriver等)进⾏管理(即下载、设置和维护),⾃版本5起,WebDriverManager还提供了其他相关功能,如发现本地系统中安装的浏览器的能⼒,构建WebDriver对象(如ChromeDriver、FirefoxDriver、EdgeDriver等)

首先我们创建一个 maven 项目
在这里插入图片描述

然后配置pom.xml 中配置文件驱动如下

在这里插入图片描述

<dependency>
    <groupId>io.github.bonigarcia</groupId>
    <artifactId>webdrivermanager</artifactId>
    <version>5.8.0</version>
    <scope>test</scope>
</dependency>

🚩Selenium库的安装

有了驱动后,我们还需要借助一个web自动化测试工具selenium

selenium 中提供了丰富的⽅法供给使用者进行web自动化测试

首先我们需要安装 selenium 库,步骤很简单,只需要在pom.xml 引入以下配置即可

<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>4.0.0</version>
</dependency>

我们先来看一个简单的自动化测试程序

public static void main(String[] args) {
    //添加浏览器配置
    ChromeOptions options = new ChromeOptions();
    //1)允许任何来源的远程连接
    options.addArguments("--remote-allow-origins=*");
    //创建浏览器驱动对象
    ChromeDriver driver = new ChromeDriver(options);
    //访问百度⽹⻚
    driver.get("https://www.baidu.com");
    //搜索“遇事问春风乄”
    driver.findElement(By.cssSelector("#kw")).sendKeys("遇事问春风乄");
    //找到百度一下并点击
    driver.findElement(By.cssSelector("#su")).click();
}

启动该程序后,就会自动访问 chrome 浏览器,并访问百度网页,输入遇事问春风乄后,并点击进行搜索;

🌳自动化常用函数

🚩元素的定位

web自动化测试的操作核心是能够找到页面对应的元素,然后才能对元素进行具体的操作。

常见的元素定位方式⾮常多,如id,classname,tagname,xpath,cssSelector

常用的主要有 cssSelector 和 xpath

🎈cssSelector

选择器的功能:选中页面中指定的标签元素

选择器的种类分为基础选择器和复合选择器,常见的元素定位方式可以通过id选择器和⼦类选择器来进行定位

在这里插入图片描述

这里我们可以选中你要操作页面的元素,右键检查,然后它就会定位到你所需要指定的位置,此时再右键选择 copy 就可以copy你想要的标签元素了

🎈xpath

XML路径语言,不仅可以在XML⽂件中查找信息,还可以在HTML中选取节点。

xpath使用路径表达式来选择xml⽂档中的节点

语法作用备注
//*获取HTML页面所有节点
//[ ]获取HTMl页面指定的节点//ul:获取HTMl页面所有的ul节点
/获取一个节点的直接节点//span/input
. .获取一个节点的父亲节点//input/. . 获取input节点的父亲节点
[@…]实现节点属性的匹配//*[@id=‘kw’] 匹配HTML页面中id属性位kw的节点
//div/ul/li[3]定位到第三个百度热搜标签

🚩操作测试对象

获取到了也⾯的元素之后,接下来就是要对元素进行操作了。常见的操作有点击、提交、输⼊、清除、获取⽂本

接下来操作以百度为例

🎈点击/提交对象—click()

driver.findElement(By.cssSelector("#su")).click();

🎈模拟按键输⼊—sendKeys(“”)

driver.findElement(By.cssSelector("#kw")).sendKeys("输⼊⽂字");

🎈清除文本内容—clear()

driver.findElement(By.cssSelector("#kw")).clear();

🎈获取文本信息—getText()

String string = driver.findElement(By.xpath("//*[@id=\"kw\"]")).getText();
System.out.println(string);

🎈获取属性值

 getAttribute("属性名称")

🎈获取当前页⾯标题

getTitle()

🎈获取当前页⾯URL

getCurrentUrl()

🚩窗口

🎈获取当前页面句柄:

driver.getWindowHandle();

🎈获取所有页面句柄:

driver.getWindowHandles()

🎈切换当前句柄为最新页面

String curWindow = driver.getWindowHandle();
Set<String> allWindow = driver.getWindowHandles();
for( String w : allWindow){
	if(w!=curWindow){
		driver.switchTo().window(w);
	}
}

🎈窗口设置大小

//窗⼝最⼤化
driver.manage().window().maximize();
//窗⼝最⼩化
driver.manage().window().minimize();
//全屏窗⼝
driver.manage().window().fullscreen();
//⼿动设置窗⼝⼤⼩
driver.manage().window().setSize(new Dimension(1024, 768));

🎈窗口切换

String curWindow = driver.getWindowHandle();
Set<String> allWindow = driver.getWindowHandles();
for( String w : allWindow){
	if(w!=curWindow){
		driver.switchTo().window(w);
	}
}

🎈屏幕截图

我们的自动化脚本⼀般部署在机器上⾃动的去运行,如果出现了报错,我们是不知道的,可以通过抓拍来记录当时的错误场景

屏幕截图⽅法需要额外导⼊包

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
</dependency>

使用如下:

File file = ((TakesScreenshot)webDriver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(file,new File(filename));

🎈关闭窗口

driver.close();
注意:窗⼝关闭后driver要重新定义

🚩等待

通常代码执行的速度比页面渲染的速度要快,如果避免因为渲染过慢出现的⾃动化误报的问题呢?

可以使用selenium中提供的三种等待⽅法:

🎈强制等待

Thread.sleep()

  • 优点:使用简单,调试的时候比较有效
  • 缺点:影响运行效率,浪费⼤量的时间

🎈隐式等待

隐式等待是⼀种智能等待,他可以规定在查找元素时,在指定时间内不断查找元素。

如果找到则代码继续执行,直到超时没找到元素才会报错

implicitlyWait()参数:Duration类中提供的毫秒、秒、分钟等方法

//隐式等待1000毫秒
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(1000));
//隐式等待5秒
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));

隐式等待作用域是整个脚本的所有元素。即只要driver对象没有被释放掉(driver.quit()),隐式等待就⼀直⽣效。

优点:智能等待,作⽤于全局

🎈显示等待

显示等待也是⼀种智能等待,在指定超时时间范围内只要满足操作的条件就会继续执行后续代码

WebDriverWait foo = new WebDriverWait(driver, Duration.ofSeconds(3))
foo.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#id")));
  • 优点:显示等待是智能等待,可以⾃定义显⽰等待的条件,操作灵活
  • 缺点:写法复杂

🚩浏览器导航

🎈打开网站

// 更⻓的⽅法
driver.navigate().to("https://selenium.dev");
// 简洁的⽅法
driver.get("https://selenium.dev");

🎈浏览器的前进、后退、刷新

driver.navigate().back();
driver.navigate().forward();
driver.navigate().refresh();

🚩弹窗

弹窗是在页⾯是找不到任何元素的,这种情况怎么处理?

使用selenium提供的Alert接⼝

🎈警告弹窗+确认弹窗

Alert alert = driver.switchTo.alert();
//确认
alert.accept()
//取消
alert.dismiss()

🎈提示弹窗

Alert alert = driver.switchTo.alert();
alert.sendKeys("hello");
alert.accept();
alert.dismiss();

🚩文件上传

点击⽂件上传的场景下会弹窗系统窗口,进行文件的选择。

selenium无法识别非web的控件,上传文件窗⼝为系统自带,无法识别窗⼝元素

但是可以使⽤sendkeys来上传指定路径的文件,达到的效果是⼀样的

WebElement ele = driver.findElement(By.cssSelector("body > div > div >input[type=file]"));
ele.sendKeys("D:\\selenium2html\\selenium2html\\upload.html");

⭕总结

关于《【软件测试】关于Web自动化测试》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下

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

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

相关文章

Linux中docker安装

准备工作 系统要求 Docker 支持 64 位版本 CentOS 7/8&#xff0c;并且要求内核版本不低于 3.10。 CentOS 7 满足最低内核的要求&#xff0c;但由于内核版本比较低&#xff0c;部分功能&#xff08;如 overlay2 存储层驱动&#xff09;无法使用&#xff0c;并且部分功能可能不…

个人电脑信息安全注意事项

个人电脑信息安全注意事项 一、密码安全&#xff1a; 设置复杂且独特的密码&#xff0c;避免使用容易猜测或常见的密码。 定期更换密码&#xff0c;特别是在重要账户或应用上。 不要在多个账户上重复使用相同的密码。 使用密码管理工具来安全地存储和访问密码。 二、软件安…

在传统云安全失败时提供帮助的六种策略

随着基于内存的攻击的激增继续挑战传统的云安全防御&#xff0c;对主动和全面的安全措施的需求变得至关重要。采用结合端点检测和响应、内存完整性保护和定期更新的多层方法可以加强对这些难以捉摸的威胁的防御。 随着云计算技术在各行各业的迅速普及&#xff0c;数据保护和安全…

在Windows 10中禁用Windows错误报告的4种方法,总有一种适合你

序言 在本文中&#xff0c;我们的主题是如何在Windows 10中禁用Windows错误报告。你知道什么是Windows错误报告吗&#xff1f;事实上&#xff0c;Windows错误报告有助于从用户的计算机收集有关硬件和软件问题的信息&#xff0c;并将这些信息报告给Microsoft。 它将检查任何可…

图像哈希:GLCM+DCT

文章信息 作者&#xff1a;Ziqing Huang期刊&#xff1a;IEEE&#xff08;一区&#xff09;题目&#xff1a;Perceptual Image Hashing with Texture and Invariant Vector Distance for Copy Detection 目的、实验步骤及结论 目的&#xff1a;使用GLCM进行全局特征的提取&am…

Transformer - 时间特征的处理

Transformer - 时间特征的处理 flyfish ETTm1.csv有如下内容 假如有2016/7/1 0:45:00有这样的时间字符串&#xff0c;如何变成时间特征列表 from typing import Listimport numpy as np import pandas as pd from pandas.tseries import offsets from pandas.tseries.freq…

BFS 专题 ——FloodFill算法:733.图像渲染

文章目录 前言FloodFill算法简介题目描述算法原理代码实现——BFSCJava 前言 大家好啊&#xff0c;今天就正式开始我们的BFS专题了&#xff0c;觉得有用的朋友给个三连呗。 FloodFill算法简介 中文&#xff1a;洪水灌溉 举个例子&#xff0c;正数为凸起的山峰&#xff0c;负…

android学习笔记(五)-MVP模式

1、MVP模式demo的实现&#xff0c;效果下&#xff1a; 2、创建一个Fruit类&#xff1a; package com.example.listview; //Fruit类就是Model&#xff0c;表示应用程序中的数据对象。 public class Fruit {private int imageId;private String name;private String price;publi…

查找算法之插值查找

目录 前言一、查找算法预备知识二、插值查找三、总结3.1 查找性能3.2 适用场景 前言 查找算法是一种用于在数据集合中查找特定元素的算法。在计算机科学中&#xff0c;查找算法通常被用于在数组、链表、树等数据结构中查找目标元素的位置或者判断目标元素是否存在。 查找算法的…

基础SQL DML-插入语句

插入语句前&#xff0c;我们先创建一个表。表的创建在DDL语句里面涉及&#xff0c;可以参考&#xff1a;小赖同学吖-CSDN博客 我们创建一个员工表进行数据的插入操作 插入&#xff08;添加&#xff09;语句的语法 给员工表添加一条记录 给员工表添加多条记录 也可以通过下面的方…

Linux文件chattr/lsattr/Linux权限(搭建权限测试环境实战)引申到内部原理及Linux删除系统文件原理-7539字详谈

企业高薪思维: 每一个阶段什么时候是最重要的&#xff1f;&#xff08;快速定位&#xff09; 1.学习最重要的事情 &#xff08;学生阶段&#xff0c;找工作前阶段&#xff09; 2.家庭&#xff0c;女朋友 &#xff08;工作阶段/学生阶段&#xff0c;学习不受到影响&#xff09; …

浅析binance新币OMNI的前世今生

大盘跌跌不休&#xff0c;近期唯一的指望就是binance即将上线的OMNI 。虽然目前查到的空投数量不及预期&#xff0c;但OMNI能首发币安&#xff0c;确实远超预期了。 OMNI代币总量1亿&#xff0c;初始流通仅10,391,492枚&#xff0c;其中币安Lanchpool可挖350万枚 对于OMNI这个…

OneNote插件推荐(OneMore)

使用OneNote编辑笔记时希望有一个插件能够实现markdown的功能&#xff0c;于是发现了OneMark&#xff0c;后面用着用着&#xff0c;OneMark竟然收费了&#xff0c;于是苦苦找寻好用的markdown插件&#xff0c;无果&#xff0c;此时发现我的目标主要是实现对代码的格式化&#x…

洛谷 -P1007 独木桥(模拟,思维)

独木桥 题目背景 战争已经进入到紧要时间。你是运输小队长&#xff0c;正在率领运输部队向前线运送物资。运输任务像做题一样的无聊。你希望找些刺激&#xff0c;于是命令你的士兵们到前方的一座独木桥上欣赏风景&#xff0c;而你留在桥下欣赏士兵们。士兵们十分愤怒&#xf…

VMware 15 虚拟机网络遇到的问题

剧情提要 通过Cent os7 的镜像文件&#xff0c;创建了一个虚拟机A&#xff08;后面简称A&#xff09;&#xff0c;事后发现&#xff0c;宿主机无法ping通A 在虚拟机中通过IP a 看到的IP信息也没有只管的ip信息如图 然后执行&#xff0c;宿主机才能访问A。 sudo dhclient ens…

前端css中的transform(转换)的使用

前端css中的transform的使用 一、前言二、流程图三、举例&#xff08;一&#xff09;、平移1.平移&#xff0c;源码12.源码1运行效果(1).视频效果(2).截图效果 3.平移3d效果&#xff0c;源码24.源码2运行效果&#xff08;1&#xff09;、视频效果&#xff08;2&#xff09;、截…

如何使用RRT模式进行交易,Anzo Capital一篇文章说清楚

railway tracks烛台模式(或铁路线 - RRT)是一种基于价格行为的简单交易策略&#xff0c;这种策略交易原理相当简单&#xff0c;易于使用。 RRT烛台形态也是图表上经常出现的形态&#xff0c;如果知道如何使用它&#xff0c;Anzo Capital认为它就是具有强烈交易信号的形态。 …

要提升B端管理系统颜值,登录页就是第一道门面,必须升级

登录页是B端管理系统门面&#xff0c;对于系统的品牌形象、辨识度、品质展示等有着不可替代的作用&#xff0c;是B端管理系统升级的必备页面&#xff0c;这里面有什么原因呢&#xff1f;10年经验的老司机→贝格前端工场为您分析一下。 一、登录页对于系统形象的重要性 B端管理…

SLS 查询新范式:使用 SPL 对日志进行交互式探索

作者&#xff1a;无哲 引言 在构建现代数据和业务系统的过程中&#xff0c;可观测性已经变得至关重要&#xff0c;日志服务&#xff08;SLS&#xff09;为 Log/Trace/Metric 数据提供了大规模、低成本、高性能的一站式平台服务&#xff0c;并提供数据采集、加工、投递、分析、…

合约X—314协议系统开发

随着区块链技术的不断发展&#xff0c;越来越多的协议被提出和应用&#xff0c;其中X314协议就是其中之一。该协议旨在通过去中心化、安全性和可扩展性等方面&#xff0c;为区块链应用提供更好的支持。本文将从多个角度对X314协议进行深度解析&#xff0c;探讨其优势和不足&…