【Web自动化】Selenium的使用(一)

目录

  • 关于自动化测试
    • selenium工作机制
  • selenium的使用
  • selenium中常用API
    • 定位元素
      • 按id定位
      • 按名称定位
      • 按类名定位
      • 按标签名定位
      • 按CSS选择器定位
      • 按XPath定位
      • 示例
    • 操作测试对象
    • 等待
      • sleep休眠
      • 隐式等待
      • 显示等待
    • 打印信息
    • 浏览器操作
    • 键盘事件
    • 鼠标事件
    • 切换窗口
    • 截图
    • 关闭浏览器

欢迎阅读本文,今天我将分享如何使用Selenium和Java语言来进行Web应用程序的自动化测试。Selenium是一个强大的工具,它可以模拟用户在Web浏览器中的操作,从而实现自动化测试。

关于自动化测试

首先,我们来先介绍一下什么是自动化测试:

简单来说,就是利用软件工具脚本执行测试任务的过程,而无需人工干预。因此,使用自动化测试能够提高测试效率、减少人力成本、增强测试覆盖范围和准确性等。

自动化测试主要关注以下层面:在这里插入图片描述
Web UI自动化测试框架Selenium关注的是UI界面,其更贴近用户和
软件系统的实际业务。

为什么要用UI自动化测试:
降低大型系统的回归测试的人力投入

selenium工作机制

在这里插入图片描述

【面试题】selenium工作原理
三方:客户端 webdriver 浏览器
客户端:存一些测试脚本,向webdriver发送Http请求
webdriver:在客户端面前充当服务器角色,是客户端和真正的服务器沟通的桥梁,解析客户端的Http请求,操作浏览器执行,并返回结果给客户端
浏览器:被webdriver操控,执行相应的操作

底层使用JavaScript模拟真实用户对浏览器进行操作。

selenium的使用

一个简单自动化脚本包括以下六个方面:

  1. 创建驱动实例
  2. 打开网页
  3. 定位元素
  4. 操作元素
  5. 验证结果
  6. 结束会话
使用java编写一个简单脚本:
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class SimpleTest {
    public static void main(String[] args) {

        // 初始化WebDriver
        WebDriver driver = new ChromeDriver();

        // 导航到网页
        driver.get("https://www.example.com");

        // 在这里添加代码来定位元素、执行操作和验证结果
        ...

        // 清理,关闭浏览器
        driver.quit();
    }
}

selenium中常用API

定位元素

元素的定位,是自动化测试中的核心,要想操作一个对象,首先要在网页中找到这个对象。selenium中定位元素统一用到的API为:

WebElement element = findElement(...);  //定位一个元素
WebElement element = findElements(...); //定位一组元素

提供了几种定位元素的常用方法,下面将逐一介绍。

按id定位

driver.findElement(By.id(id名称));

按名称定位

driver.findElement(By.name(name名称));

按类名定位

driver.findElement(By.className(类名));

按标签名定位

driver.findElement(By.tagName(标签名));

按CSS选择器定位

driver.findElement(By.cssSelector(css选择器路径));

css选择是一种语法,可以通过四种选择器来实现:

id选择器:#id值
类选择器:.class值
标签选择器:标签名
父类选择器 子类选择器:父类选择器表达式 子类选择器表达式
(#sp #kw)

按XPath定位

driver.findElement(By.xpath(xpath路径));

xpath也是一种语法,下面简单介绍以下它的原理

绝对路径:/开头,可以从根节点开始定位元素
示例:/html/body/div[1]/form/input[1]
相对路径://开头,可以从当前节点开始定位元素
示例://form/input[@id=‘username’]
相对路径 + 索引 ://form/span[1]/input
相对路径 + 属性值 ://input [@class=“”]
相对路径 + 通配符://[@=“”]
相对路径 + 文本匹配://a[text()=“”]

示例

举个例子,对于定位百度搜索框这个元素,我们有以下几种定位方式:

<input id=“kw” class=“s_ipt” type=“text” maxlength=“100” name="wd"autocomplete=“off”>

driver.findElement(By.id("kw"));
driver.findElement(By.name("wd"));
driver.findElement(By.className("s_ipt"));
driver.findElement(By.tagName("input"));
driver.findElement(By.cssSelector("#kw"));
driver.findElement(By.xpath("//*[@id='kw']"));

关于如何快速定位元素,不用我们自己编写css选择器语句或者xpath语句,直接在被测试网页中按F12 或者 右击鼠标进入开发者模式后,选中你要定位的元素,放到对应的代码区域,右击复制路径即可
在这里插入图片描述

操作测试对象

click():单击元素。
sendKeys(CharSequence… keysToSend):向元素发送键盘输入。
clear():清除元素的内容。
submit(): 提交内容。
getText():获取元素的文本内容。
getAttribute(String name):获取元素指定属性的值。

关于click 和 submit 的区别:
如果点击的元素在form标签中,二者效果一致,如果点击的元素放在非form标签中,此时使用submit会报错。一般建议使用click.

等待

sleep休眠

sleep(xxx); xxx为ms数,强制等待

隐式等待

与sleep固定等待时间不同的是,隐式等待方法在一个等待时间范围内结束。在等待时间范围内轮询式查找元素,当超出等待的时间还没找到,再抛出异常。

driver.manage().timeouts().implicitlyWait(long time, TimeUnit unit);
TimeUnit表示时间单位,例如秒(SECONDS)、毫秒(MILLISECONDS)、分钟(MINUTES)等。
driver.manage().timeouts().implicitlyWait(3,SECONDS);
WebDriver 就会在抛出找不到元素的异常之前,最多等待 3 秒钟的时间

显示等待

WebDriverWait wait = new WebDriverWait(driver, timeout);
初始化 WebDriverWait 对象,设置最大等待时间。
wait.until(ExpectedConditions.condition);
等待某个条件成立,可以是元素可见、元素存在、元素可点击等条件。

推荐使用隐式等待。

打印信息

getCurrentUrl() ; 返回当前页面url
getTitle(); 返回当前页面title

浏览器操作

navigate().to(String url):导航到指定的 URL。
navigate().back() 和 navigate().forward():在浏览历史中向后或向前导航。
manage().window().maximize():最大化浏览器窗口。
manage().window().setSize():设置浏览器窗口大小

控制浏览器滚动条

这里滚动条的控制需要依靠js脚本
(JavascriptExecutor)driver.executeScript(...);
...处填写script,以下两种选项可填入:
//将浏览器滚动条滑到最顶端
document.documentElement.scrollTop=0
//将浏览器滚动条滑到最底端
document.documentElement.scrollTop=10000

键盘事件

element.sendKeys(Keys.ENTER); // 模拟按下回车键
element.sendKeys(Keys.BACK_SPACE); // 模拟按下退格键
element.sendKeys(Keys.chord(Keys.CONTROL, “a”)); //按下Control a全选
element.sendKeys(Keys.ARROW_UP); // 模拟按下向上箭头键
element.sendKeys(Keys.ARROW_DOWN); // 模拟按下向下箭头键

鼠标事件

首先需要我们新定义一个Actions类

Actions actions = new Actions(driver);
perform();执行序列方法
doubleClick(); 双击动作
contextClick(); 右击动作
dragAndDrop(); 拖拽动作
moveToElement(); 移动动作

在执行鼠标操作时,必须在动作序列后加上perform执行方法,才能达到效果。即:动作序列+执行方法

actions.doubleClick(element).perform(); //双击
actions.contextClick(element).perform(); //右击
actions.dragAndDrop(source, target).perform(); //拖放操作,一个元素到另一个
actions.moveToElement(element).perform(); //移动操作

切换窗口

有的时候我们浏览器打开了很多窗口,那如何切换到指定窗口呢?
在这里插入图片描述

获取当前窗口句柄(Handle):
使用 getWindowHandle() 方法获取当前窗口的句柄,句柄是唯一标识一个窗口的字符串
获取所有窗口句柄:
使用 getWindowHandles() 方法获取所有窗口的句柄集合
遍历集合找到需要切换的窗口句柄,最后使用 switchTo().window() 方法切换到指定窗口

打开了多个窗口,切换到最后一个窗口中(最新打开的窗口)
String cur_handle=driver.getWindowHandle();
Set<String> all_handles=driver.getWindowHandles();
String target="";
for(String window:all_handles){
	target=window;
}
driver.switchTo().window(target); //切换到最后一个窗口句柄

截图

截图操作,需要引入依赖。

    <!-- ht tps://mvnrepository.com/artifact/commons-io/commons-io -->
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.11.0</version>
    </dependency>

在这里插入图片描述

关闭浏览器

quit();会关闭整个浏览器进程,包括所有打开的窗口和标签页,清空缓存(cookie)
close();只会关闭当前活动的窗口或标签页

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

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

相关文章

Windows 11 专业版 23H2 Docker Desktop 下载 安装 配置 使用

博文目录 文章目录 Docker Desktop准备系统要求 (WSL 2 backend)在 Windows 上打开 WSL 2 功能先决条件开启 WSL 2 WSL下载安装启动配置使用镜像 Image卷积 Volumes容器 Containers 命令RedisMySQLPostGreSQL Docker Desktop Overview of Docker Desktop Docker Desktop 疑难解…

揭秘五五复制模式,助力平台用户快速裂变至百万级!

你是否时常为平台的用户增长缓慢而倍感压力&#xff1f;是否渴望找到一种方法&#xff0c;让平台用户迅速扩张&#xff0c;实现百万级用户量的突破&#xff1f;今天&#xff0c;我将为大家揭晓一种创新的商业模式——五五复制模式&#xff0c;它或许能成为你实现梦想的关键。 五…

位运算

本文用于记录个人算法竞赛学习&#xff0c;仅供参考 目录 一.n的二进制表示中第k位x 二.通过lowbit操作返回x的最后一位1 1.lowbit实现&#xff1a;x & (-x) 2. lowbit具体作用 一.n的二进制表示中第k位x n 15 &#xff08;1111&#xff09;2 操作&#xff1a;1.x …

Redis主从同步机制

一、步骤如下&#xff1a;&#xff08;全量&#xff09; 1.从服务器向主服务器发送同步命令 sync&#xff1b; 2.主数据库接收到同步命令后&#xff0c;会执行 bgsave 命令&#xff0c;在后台生成一个 rdb 文件&#xff0c;并使用一个缓冲区记录从现在开始执行的所有写命令&a…

苏州金龙新V系客车创新打造,剑指新标杆

诞生于2004年的苏州金龙V系客车在20年时间里销售了6万多辆&#xff0c;用户超过5000家&#xff0c;用户的反复选择体现了它超强的产品力。3月下旬&#xff0c;全新打造的苏州金龙新V系客车震撼登场&#xff0c;拥趸们发现&#xff0c;该系列客车在智能化、网联化及设计语言方面…

如何使用剪映专业版剪辑视频

1.操作界面功能介绍 2.时间线的使用 拖动前端后端缩减时长&#xff0c;有多个素材可以拖动调节前后顺序拼接。 分割视频 删除

基于无迹卡尔曼滤波的路面附着系数估计算法

基于无迹卡尔曼滤波的路面附着系数估计算法 附赠自动驾驶学习资料和量产经验&#xff1a;链接 路面附着系数作为车辆底盘动力学反馈控制中的重要变量&#xff0c;对它的精确估计直接关系到控制系统的平稳运行和车辆行驶安全。但是由于无法通过直接测量获得某些状态参数或者测…

手册更新 | RK3588开发板适配Android13系统

iTOP-RK3588开发板使用手册更新&#xff0c;后续资料会不断更新&#xff0c;不断完善&#xff0c;帮助用户快速入门&#xff0c;大大提升研发速度。 本次更新内容为《iTOP-3588开发板源码编译手册》&#xff0c;RK3588开发板适配了Android13系统&#xff0c;手册同步添加了And…

@所与人「要复现」文献调研与需求收集

鉴于上次的「下一个要知道什么」调查结果&#xff0c;我发现「复现文献」的呼声不是一般的高&#xff0c;那是相当的高呐&#xff01; 所以&#xff01;新的调查又来了&#xff01;文献数量和类型实在是太太太太太太庞大了&#xff01;所以我就想征询一下大家的需求&#xff0c…

新人必看,轻松学会品牌360百科词条创建

品牌在当今互联网时代的重要性不言而喻。随着人们对信息的需求和获取渠道的多样化&#xff0c;品牌需要在各个平台上展示自己的形象&#xff0c;其中包括360百科这样的综合性知识平台。创建360百科词条可以为品牌增加曝光度、提升信誉度&#xff0c;进而吸引更多潜在客户和粉丝…

机器学习实战17-高斯朴素贝叶斯(GaussianNB)模型的实际应用,结合生活中的生动例子帮助大家理解

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下机器学习实战17-高斯朴素贝叶斯(GaussianNB)模型的实际应用&#xff0c;结合生活中的生动例子帮助大家理解。GaussianNB&#xff0c;即高斯朴素贝叶斯模型&#xff0c;是一种基于概率论的分类算法&#xff0c;广泛应…

HCIA复习

OSI --开放式系统互联参考模型 --- 7层参考模型 TCP/IP协议栈道 --- 4层或5层 OSI&#xff1a; 应用层 抽象语言 -->编码 表示层 编码-->二进制 表示层以下都是二进制-----data&#xff08;数据&#xff09; 会话层 提供应用程序的会话地址 上三层为应用…

刷题记录-leetcode字母异位词分组

给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs ["eat", "tea", "tan", "ate", "nat", &qu…

分享 5 个提高技术领导力的技巧

技术领导力于很多人而言都是谜一般的存在。有观点认为&#xff0c;实战经验丰富的资深开发最终只有成为技术管理者才能继续成长。从某些方面来看&#xff0c;这可能是对的&#xff0c;但考虑到公司结构和规章制度等&#xff0c;想要完成从「个人贡献者」到「技术管理者」的跨越…

Linux 查看磁盘信息:df与du命令详解

一、df 1.简介 df 是 disk free的缩写&#xff0c;从UNIX和类UNIX操作系统的早期开始&#xff0c;它就是UNIX和类UNIX操作系统的一部分。它被设计为一种工具&#xff0c;用于监视系统上已使用和可用的磁盘空间数量。 df 命令主要用于需要检查文件系统上已使用和可用的磁盘空…

【Servlet】生命周期

文章目录 一、生命周期二、错误实例三、修改Servlet的初始化时机 一、生命周期 生命周期&#xff1a;实例化、初始化、服务、销毁 从出生到死亡的过程。对应Servlet中的三个方法&#xff1a;init()&#xff0c;service()&#xff0c;destroy() 被创建&#xff1a;执行init方法…

磁性脂质体MLs纳米药物载体

磁性脂质体&#xff08;magnetoliposomes, MLs&#xff09;是一种结合了脂质体和磁性纳米颗粒&#xff08;MNPs&#xff09;的复合纳米结构&#xff0c;这种结构兼具了脂质体的生物相容性和磁性纳米颗粒的磁响应性&#xff0c;使其成为生物医学领域尤其是在药物递送系统中非常有…

算法学习——LeetCode力扣动态规划篇3(494. 目标和、474. 一和零、518. 零钱兑换 II)

算法学习——LeetCode力扣动态规划篇3 494. 目标和 494. 目标和 - 力扣&#xff08;LeetCode&#xff09; 描述 给你一个非负整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 ‘’ 或 ‘-’ &#xff0c;然后串联起所有整数&#xff0c;可以构造一个 表达式 …

sk-learn 特征数据预处理方式汇总

数据集及基本操作 1&#xff09;数据集的组成 数据集由特征(feature)与标签(label)构成。 特征是输入数据。 什么是特征&#xff08;Features&#xff09;: 机器学习中输入数据&#xff0c;被称为特征。通常特征不止1个&#xff0c;可以用 n 维向量表示n个特征。 Features 数…

智能仪器替代技术工程师重复工作 专注生产方案优化!

关键词&#xff1a;智能仪器,测径仪,测宽仪,测厚仪,直线度测量仪 在当今竞争激烈的市场环境下&#xff0c;企业需要不断提高生产效率和质量&#xff0c;以满足客户的需求。而技术工程师在生产过程中扮演着至关重要的角色&#xff0c;但他们的时间和精力往往被重复的工作所占据&…