自动化测试 selenium基础

devtools/2024/10/9 11:20:52/

前言

我们都知道测试开发工程师的任务是根据用户需求测试用例的同时,害的开发自动化工具来减轻测试压力且提高测试的效率以及质量,这一节我们就来简单谈谈开发简单的自动化工具基础

什么是自动化测试呢?就是将我们需要做的测试交给机器去做,也就是使用代码来模拟人对于机器的行为,比如说点击动作,输入动作.....

环境配置

我们知道chrome浏览器是当前使用较多的浏览器,本期就以chrome为例来操作

首先我们需要下载一个chrome浏览器,并查看对应的版本号引入chrome浏览器的一个驱动

网址如下:

Chrome for Testing availability

下载对应的版本即可

然后将对应的chrome.exe复制到对应的路径下,并配置环境变量

总而言之就是将驱动放置到对应的chrome安装路径,将chrome安装路径加入到环境变量即可

然后加上对应的依赖

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

此时我们就可以开始我们的自动化之旅了

在这之前,聊一聊selenium是如何使用代码达成模拟操作的

我们先看一张图

这个图有三个角色

自动化脚本代码 web驱动 浏览器 

我们通过代码生成一个http请求  请求到达驱动就生成一个http server接受请求 最后达成操作浏览器返回值的作用

测试练习

1.测试环境是否搭建完成

        WebDriver driver = new ChromeDriver();driver.get("http://www.baidu.com");

如果能使用chrome浏览器跳转到百度首页,就代表环境搭建成功

2.使用代码模拟搜索功能

在这之前我们需要知道常用的定位方式

1.使用css选择器定位

就和css标签定位方式是一样的

类选择器使用.  

id选择器使用#

2.使用xpath定位

xpath是从dom树结构中定位

有两种方式

一种是以绝对路径的方式(不常用)

例如: /html/body/div....

一种是以相对路径的方式

常用的是以下四种

1.相对路径 + 索引

//form/span[1]  注意这里html中索引是从1开始的

2.相对路径 + 属性

//input[@class="s_ipt"]

3.相对路径 + 通配符

//*[@]*="s_ipt"]

4.相对路径 + 文本匹配 (标签中间的文本)

a[text()="aaa"]  这里匹配的就是aaa文本所在的a标签

我们可以使用简洁的方式选中自动生成选择器以及xpath

知道了以上知识,我们就可以来实现搜索了

        WebDriver driver = new ChromeDriver();driver.get("http://www.baidu.com");WebElement element = driver.findElement(new By.ByCssSelector("#kw"));element.sendKeys("测试开发前景");driver.findElement(new By.ByCssSelector("#su")).click();sleep(3000);driver.quit();

这里我们就可以实现看到测试开发前景的搜索结果了

休眠3000秒是为了可以看到测试的结果

3.操作测试对象

注: 以下函数都是对于WebElement对象进行操作的

3.1 点击对象

使用click()函数即可

3.2 输入值

使用sendKeys()函数即可

3.3 清空文本

clear()函数即可

3.4 提交 

submit()即可

3.5 获取元素文本信息

text()函数即可

3.6 获取 title/url

对WebDriver对象使用getTitle()/getCurrentUrl()方法即可

3.7 窗口最大化

使用WebDriver.manage().window().maximize()函数即可

3.8 设置浏览器的大小

webdriver.manage().window().setSize(new  Demension(width,height))

3.9 浏览器的前进后退

webdriver.navigate().back()/forward()

3.10 操作浏览器滚动条

需要将WebDriver强转成JavaScriptExcucter然后使用前端的js语法解决问题

比如

3.11 键盘事件 - 回车

只需要将找到的WebElement调用sendKeys方法传入参数Keys.ENTER即可

例如 

webDriver.findElement(By.cssSelecter("#kw")).sendKeys(Keys.ENTER)

3.12 键盘事件 组合键

webDriver.findElement(By.cssSelecter("#kw")).sendKeys(Keys.CONTROL,"A");

其他的组合键和这个同理

3.13 鼠标事件

Actions action = new Action(webdriver);
//找到目标元素
WebLelment element = webdriver.findElement(By.cssSelecter("..."));
actions.moveToElement(element).contextClick().perform()
//不加上perform也可以,但是看不到效果

3.14 切换窗口

因为如果点击的是超链接或者是子窗口的元素

直接访问不到

需要定位到对应窗口,这里以新窗口为例

这里我们主要是用过句柄访问

//获取本页面句柄
String cur = webDriver.getWindowHandle();
//获取所有句柄
Set<String> handles = webDriver.getWindowHandles();
//转到新窗口的句柄
String  tmp = "";
for(String s : handles) {
{tmp = s;
}
webDriver.switchTo().window(tmp);

3.15 截图

将webDriver转成TakeScreenShot即可

记得引入common-io的依赖

File f = (TakeScreenShot)webDriver.getScreenstotAs(OutputType.FILE);
FileUtils.copyFile(f,new File("目的地址"));

3.16 选中复选框

使用list接受 findElement

for循环分别getAttribute("type").equals(...)

然后对应的click()即可

3.17  子网页

要选中只需要使用

webDriver.switchTo().frame("对应的frame名即可")

或者使用索引也可以 索引从1开始


http://www.ppmy.cn/devtools/38913.html

相关文章

HTML5 Canvas发光Loading动画源码

源码介绍 之前我们分享过很多基于CSS3的Loading动画效果&#xff0c;相信大家都很喜欢。今天我们要来分享一款基于HTML5 Canvas的发光Loading加载动画特效。Loading旋转图标是在canvas画布上绘制的&#xff0c;整个loading动画是发光3D的视觉效果&#xff0c;HTML5非常强大。 …

每日一练 2024.5.10

题目&#xff1a; 给定一个非负整数数组 nums&#xff0c; nums 中一半整数是 奇数 &#xff0c;一半整数是 偶数 。 对数组进行排序&#xff0c;以便当 nums[i] 为奇数时&#xff0c;i 也是 奇数 &#xff1b;当 nums[i] 为偶数时&#xff0c; i 也是 偶数 。 示例 1&#…

word 毕业论文格式调整

添加页眉页脚 页眉 首先在页面上端页眉区域双击&#xff0c;即可出现“页眉和页脚”设置页面&#xff1a; 页眉左右两端对齐 如果想要页眉页脚左右两端对齐&#xff0c;可以选择添加三栏页眉&#xff0c;然后将中间那一栏删除&#xff0c;即可自动实现左右两端对齐&#x…

笔记本电脑怎么多选删除文件?误删除文件怎么办

在日常使用笔记本电脑中&#xff0c;我们可能会遇到需要删除大量文件的情况&#xff0c;例如清理临时文件、整理文档或卸载不再需要的程序。手动一个一个地删除不仅效率低下&#xff0c;还可能遗漏某些文件。那么&#xff0c;如何在笔记本电脑上高效地进行多选删除操作呢&#…

[Unity常见小问题]打包ios后无法修改模型透明度

问题 在Editor下可以使用如下代码去修改模型的材质的透明度&#xff0c;但是打包ios后无法对透明度进行修改且没有任何warning和error using System.Collections; using System.Collections.Generic; using UnityEngine;public class NewBehaviourScript : MonoBehaviour {[R…

PyQt5中的事件与信号处理

文章目录 1. 简介1.1事件(Event)1.2 信号(Signal)与槽(Slot)1.3 自定义信号 2. 一个信号与槽的简单示例13. 一个信号与槽的简单示例24. 事件发送者5. 创建自定义信号6. 一个简单计算器 1. 简介 在PyQt5中&#xff0c;事件和信号处理是GUI编程的核心概念。事件是指用户操作或系…

山东知识付费问答系统,给孩子学习优秀的辅导班怎么选择?

现在的辅导班越来越多&#xff0c;除了兴趣爱好补习班&#xff0c;还有某一学科辅导&#xff0c;辅导班之所以这么火&#xff0c;是因为很多家长学生有这方面的需求。家长都想要自己的孩子成绩提高&#xff0c;比如数学等&#xff0c;辅导班也就越来越多&#xff0c;这么多辅导…

CSS:min-width作用

min-width作用 介绍用法举例1. 设置元素的最小宽度2. 使用百分比设置最小宽度3. 继承最小宽度 总结 介绍 在Web开发中&#xff0c;min-width 是CSS&#xff08;层叠样式表&#xff09;的一个属性&#xff0c;用于设置元素的最小宽度。当元素的宽度小于min-width属性指定的值时…