【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) {// 初始化WebDriverWebDriver 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();只会关闭当前活动的窗口或标签页

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

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

相关文章

YOLO格式数据集转COCO格式

网上找了很久的YOLO格式数据集转COCO格式的代码&#xff0c;但是没有一个成功的&#xff0c;费尽千辛万苦终于找到一个能用的&#xff0c;因此记录一下。 一、首先YOLO格式数据集文件布局 其中lmages和labels 中的内容布局如下&#xff0c;只不过一个存放图片&#xff0c;一个存…

接口自动化框架搭建(三):pytest库安装

1&#xff0c;使用命令行安装 前提条件&#xff1a;已安装python环境 pip install pytest 或者 pip3 install pytest2&#xff0c;从编译器pycharme中安装

6.2物联网RK3399项目开发实录-驱动开发之GPIO使用(wulianjishu666)

物联网嵌入式开发源码例程&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1B3oqq5QBhN-VmTFt9CI-7A?pwd2ihg ******************************************************************************************* GPIO 使用 简介 GPIO, 全称 General-Purpose Input/…

前端-css-2

1.背景样式 属性名作用属性值background-color背景颜色颜色background-image设置背景图像地址url(地址)background-repeat设置背景图像重复方式 repeat&#xff1a;重复。 repeat-x&#xff1a;横向重复。 repeat-y&#xff1a;纵向重复。 no-repeat&#xff1a;不重复。 back…

YOLOv9改进策略 : C2f改进 | 引入YOLOv8 C2f结构

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文改进内容&#xff1a;应订阅者需求&#xff0c;如何将YOLOv8 C2f结构引入到YOLOv9 &#x1f4a1;&#x1f4a1;&#x1f4a1;C2f层是一种特殊的卷积层&#xff0c;用于将不同尺度的特征图融合在一起&#xff0c;以提高目标检测的准…

C# 多线程

文章目录 C# 多线程进程与线程无参数的子线程带参数的子线程运行结果 销毁线程 Abort()运行结果 ThreadPool和Task运行结果 C# 多线程 进程与线程 进程&#xff1a;进程就是一个应用程序&#xff0c;对电脑的各种资源的占用 线程&#xff1a;线程是程序执行的最小单位&#…

新型的FPGA器件将支持多样化AI/ML创新进程

作者&#xff1a;郭道正, Achronix半导体中国区总经理 近日举办的GTC大会把人工智能/机器学习&#xff08;AI/ML&#xff09;领域中的算力比拼又带到了一个新的高度&#xff0c;这不只是说明了通用图形处理器&#xff08;GPGPU&#xff09;时代的来临&#xff0c;而是包括GPU、…

08-研发流程设计(上):如何设计Go项目的开发流程?

在Go 项目开发中&#xff0c;我们不仅要完成产品功能的开发&#xff0c;还要确保整个过程是高效的&#xff0c;代码是高质量的。 所以&#xff0c;Go 项目开发一定要设计一个合理的研发流程&#xff0c;来提高开发效率、减少软件维护成本。研发流程会因为项目、团队和开发模式…

Kitex 提供的服务注册与发现 etcd 拓展

&#x1f4d5;作者简介&#xff1a; 过去日记&#xff0c;致力于Java、GoLang,Rust等多种编程语言&#xff0c;热爱技术&#xff0c;喜欢游戏的博主。 <br> &#x1f4d8;相关专栏<a href"https://blog.csdn.net/studycodeday/category_12460797.html">…

EasyBoss ERP上线实时数据大屏,Shopee本土店铺数据实时监测

近日&#xff0c;灵隐寺PPT汇报用上数据大屏疯狂刷屏&#xff0c;有做东南亚本土电商的老板发现这种数据大屏的模式可以很好地展现店铺运营状况。 所以就有老板来问&#xff1a;EasyBoss能不能也上线实时数据大屏的功能&#xff1f;没问题&#xff01;立马安排&#xff01; 要有…

Coursera自然语言处理专项课程03:Natural Language Processing with Sequence Models笔记 Week01

Natural Language Processing with Sequence Models Course Certificate 本文是https://www.coursera.org/learn/sequence-models-in-nlp 这门课程的学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。 文章目录 Natural Language Processing with Sequence ModelsWeek 01…

Netty核心原理剖析与RPC实践21-25

Netty核心原理剖析与RPC实践21-25 21 技巧篇&#xff1a;延迟任务处理神器之时间轮 HahedWheelTimer Netty 中有很多场景依赖定时任务实现&#xff0c;比较典型的有客户端连接的超时控制、通信双方连接的心跳检测等场景。在学习 Netty Reactor 线程模型时&#xff0c;我们知道…

基于单片机居家室内环境监测系统仿真设计

**单片机设计介绍&#xff0c;基于单片机居家室内环境监测系统仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机居家室内环境监测系统仿真设计是一个综合性的项目&#xff0c;它结合了单片机技术、传感器技术、…

【JavaWeb】Day27.Web入门——Tomcat介绍

目录 WEB服务器-Tomcat 一.服务器概述 二.Web服务器 三.Tomcat- 基本使用 1.下载 2.安装与卸载 3.启动与关闭 4.常见问题 四.Tomcat- 入门程序 WEB服务器-Tomcat 一.服务器概述 服务器硬件&#xff1a;指的也是计算机&#xff0c;只不过服务器要比我们日常使用的计算…

应用案例 | 复合机器人助力智能仓储物流实现高效发展

随着智能仓储物流技术的快速发展&#xff0c;复合机器人作为一种先进的自动化设备&#xff0c;正逐渐在仓储物流领域发挥重要作用。以下是一个复合机器人在智能仓储物流的应用案例。 案例背景 某大型电商企业面临着日益增长的订单量和仓储物流压力。为了提高物流效率、降低人力…

docker中配置交互式的JupyterLab环境的问题

【报错1】 Could not determine jupyter lab build status without nodejs 【解决措施】安装nodejs(利用conda进行安装/从官网下载进行安装&#xff09; 1、conda安装 conda install -c anaconda nodejs 安装后出现其他报错&#xff1a;Please install nodejs 5 and npm bef…

02正式学习第一天

1、windows上加载socket库 链接输入ws2_32.lib 代码code&#xff1a; #ifdef _WIN32 #include<windows.h> #else #include <sys/socket.h> #include<sys/types.h> #include<unistd.h> #include<cstring> #include<arpa/inet.h> #include…

三极管知识点总结

目录 一、三极管概述 (Bipolar Junction Transistor) 1.历史&#xff1a; 2.内部结构 3.符号 4.分类 二、三极管三种工作状态 (working position) 1.截止状态 2.放大状态 3.饱和导通 三、三极管输入\输出特性曲线 &#xff08;characteristic curve&#xff09; 四、…

2013年认证杯SPSSPRO杯数学建模B题(第一阶段)流行音乐发展简史全过程文档及程序

2013年认证杯SPSSPRO杯数学建模 B题 流行音乐发展简史 原题再现&#xff1a; 随着互联网的发展&#xff0c;流行音乐的主要传播媒介从传统的电台和唱片逐渐过渡到网络下载和网络电台等。网络电台需要根据收听者的已知喜好&#xff0c;自动推荐并播放其它音乐。由于每个人喜好…

mongodb sharding分片模式的集群数据库,日志治理缺失导致写入数据库报错MongoWriteConcernException的问题总结(上)

一、背景 常见的mongodb集群模式有以下三种&#xff1a; 主从复制&#xff08;Master-Slave&#xff09;模式副本集&#xff08;Replica Set&#xff09;模式分片&#xff08;Sharding&#xff09;模式 公司测试环境搭建的集群采用分片模式&#xff0c;有同事反馈说&#xf…