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

news2024/9/28 15:20:41

文章目录

  • 🍃前言
  • 🌲如何实现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自动化测试》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下

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

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

相关文章

洗地机选哪个牌子好?过来人建议买这四款:性价比高质量好

随着生活节奏的加快&#xff0c;洗地机逐渐成为了人们生活中的清洁小能手&#xff0c;但市面上品牌众多&#xff0c;性能参差不齐&#xff0c;消费者往往难以抉择。在选择洗地机时&#xff0c;我们不仅要考虑其清洁效果&#xff0c;还应着重考察性价比。那么&#xff0c;面对如…

3.AlexNet--CNN经典网络模型详解(pytorch实现)

看博客AlexNet--CNN经典网络模型详解&#xff08;pytorch实现&#xff09;_alex的cnn-CSDN博客&#xff0c;该博客的作者写的很详细&#xff0c;是一个简单的目标分类的代码&#xff0c;可以通过该代码深入了解目标检测的简单框架。在这里不作详细的赘述&#xff0c;如果想更深…

[Meachines][Easy]Devvortex

Main $ nmap -p- 10.10.11.242 --min-rate 1000 # echo 10.10.11.242 devvortex.htb>>/etc/hosts 子域名爆破 $ apt install seclists $ wfuzz -c -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -u "http://devvortex.htb/" -H &…

【Transformer】detr梳理

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 detr detr 1. 引言 论文&#xff1a; https://arxiv.org/pdf/2005.12872v3.pdf 时间&#xff1a; 2020.5.26 作者&#xff1a; Nicolas Carion?, Fra…

陈奂仁联手 The Sandbox 推出“Hamsterz Doodles”人物化身系列

全新人物化身系列结合艺术与实用性 开创元宇宙新篇章 著名亚洲唱作歌手兼香港电影金像奖得主陈奂仁携手 The Sandbox&#xff0c;兴奋地宣布推出新的元宇宙人物化身系列 —— Hamsterz Doodles 仓鼠涂鸦。 陈奂仁在 The Sandbox 推出 Hamsterz Doodles 系列&#xff0c;将艺术与…

智能家居—ESP32开发环境搭建

相关文章 毕业设计——基于ESP32的智能家居系统(语音识别、APP控制) 智能家居—ESP32开发环境搭建 一、下载安装二、验证三、资料获取 一、下载安装 下载安装 vscode 安装插件 创建工程 二、验证 写一个简单的函数来验证一下功能 void setup() {// put your setup c…

类和对象(2)——封装(封装的概念、包、staic)

前言 面向对象程序三大特性&#xff1a;封装、继承、多态。而类和对象阶段&#xff0c;主要研究的就是封装特性。何为封装呢&#xff1f;简单来说就是套壳屏蔽细节。 一、什么是封装 1.1 概念 将数据和操作数据的方法进行有机结合&#xff0c;隐藏对象的属性和实现细节&…

【码农圈子】想加免费的程序员微信群的看过来

群名&#xff1a;码农圈子 很多人后台反应&#xff0c;最近有没有免费的微信技术交流社群 。今天特意写一篇文章来创建一些只有程序猿的微信群。&#xff08;广告党慎入&#xff01;&#xff09; 这些微信技术群都是完全免费&#xff0c;后续也不会收取任何费用 。 群规则 …

Paragon NTFS如何手动更新? Paragon NTFS格式化硬盘会损失数据吗?

Paragon NTFS for Mac常被用于实现在Mac上读写NTFS格式硬盘&#xff0c;然而&#xff0c;有时用户可能会遇到软件无法自动更新的情况&#xff0c;需要进行手动更新操作。下面我们来看看Paragon NTFS如何手动更新&#xff0c;Paragon NTFS格式化硬盘会损失数据吗的相关内容。 一…

Python 使用 pip 安装 matplotlib 模块(精华版)

pip 安装 matplotlib 模块 1.使用pip安装matplotlib(五步实现):2.使用下载的matplotlib画图: 1.使用pip安装matplotlib(五步实现): 长话短说&#xff1a;本人下载 matplotlib 花了大概三个半小时屡屡碰壁&#xff0c;险些暴走。为了不让新来的小伙伴走我的弯路&#xff0c;特意…

【matlab 代码的python复现】 Matlab实现的滤波器设计实现与Python 的库函数相同实现Scipy

实现一个IIR滤波器的设计 背景 Matlab 设计的滤波器通常封装过于完整,虽然在DSP中能够实现更多功能的滤波器设计但是很难实现Python端口的实现。 我们以一段原始的生物电信号EEG信号进行处理。 EEG信号 1.信号获取 EEG信号通常通过头皮电极,经过多通道采样芯片采样,将获…

mysql面试题八(SQL语句)

目录 1.SQL 基本组成部分 常用操作示例 创建表 插入数据 查询数据 更新数据 删除数据 创建索引 授予用户权限 2.常见的聚合查询 1. 计数&#xff08;COUNT&#xff09; 2. 求和&#xff08;SUM&#xff09; 3. 平均值&#xff08;AVG&#xff09; 4. 最大值&…

使用FPGA实现超前进位加法器

介绍 前面已经向大家介绍过8位逐位进位加法器了&#xff0c;今天向大家介绍4位超前进位加法器。 对于逐位进位加法器来说&#xff0c;计算任意一位的加法运算时&#xff0c;必须等到低位的加法运算结束送来进位才能运行。这种加法器结构简单&#xff0c;但是运算慢。 对于超…

WSL安装-问题解决

WslRegisterDistribution failed with error: 0x8004032d WslRegisterDistribution failed with error: 0x80080005 Error: 0x80080005 ??????? 解决&#xff1a; 1、 winr输入&#xff1a;optionalfeatures.exe 2、打开这两项

钉钉报警的优势在哪里?如何配置钉钉机器人进行报警信息推送?

一、常见的报警方式 1、短信或者电话报警 这样的报警方式更适合高级别的报警提醒&#xff0c;用于处理紧急情况。出现级别不高而又频繁地发送短信会让人产生排斥感&#xff0c;而且电话或者短信的报警方式也存在一定的成本。 2、邮件报警 邮件报警更适用于工作时的提醒&…

支付方式模块代码示例

支付方式模块代码示例 效果展示 <view class"card"><uni-title type"h3" title"支付方式"></uni-title><radio-group change"radioChange"><label class"radio"><view class"zf-t…

ThingsBoard通过规则链使用邮件发送报警信息

1、描述 2、通过规则链路配置发送邮件只需 两步 3、案例 1、基础链路 2、选择变换节点里面的To Email 3、 编辑节点to email 4、 将创建告警与to email链接 5、选择外部节点中的send email 6、配置邮箱相关信息&#xff0c;如过不知道密钥如何获取的&#xff0c;请查看下…

yolo-驾驶行为监测:驾驶分心检测-抽烟打电话检测

在现代交通环境中&#xff0c;随着汽车技术的不断进步和智能驾驶辅助系统的普及&#xff0c;驾驶安全成为了公众关注的焦点之一 。 分心驾驶&#xff0c;尤其是抽烟、打电话等行为&#xff0c;是导致交通事故频发的重要因素。为了解决这一问题&#xff0c;研究人员和工程师们…

JRT质控数据录入

之前有时间做了质控物维护界面&#xff0c;有了维护之后就应该提供可以录入业务数据的功能了&#xff0c;当时给质控物预留了一个“项目批次业务数据”的功能说是业务数据会给每天拷贝维护数据。这次一起补上&#xff0c;展示JRT怎么写质控数据录入的界面。 界面如下&#xff…

【Linux基础】Linux基础概念

目录 前言 浅谈什么是文件&#xff1f; Linux下目录结构的认识及路径 目录结构 路径 家目录 什么是递归式的删除 重定向 输出重定向&#xff1a; 追加重定向&#xff1a; 输入重定向&#xff1a; 命令行管道 shell外壳 为什么需要shell外壳&#xff1f; shell外壳…