「自动化测试」Selenium 的使用

使用 Selenium 需要先导入相关依赖

<dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>4.0.0</version> 
</dependency><dependency><groupId>io.github.bonigarcia</groupId><artifactId>webdrivermanager</artifactId><version>5.8.0</version><scope>test</scope>
</dependency>

定位元素

CSS 选择器(cssSelector)可用于选中页面中指定的标签元素

在这里插入图片描述
复制后得到:

#kw

除了 CSS 选择器,常用的还有 xpath,它是 XML 路径语言,不仅可以在 XML 文件中查找信息,也可以在 HTML 中选取节点
xpath 使用路径表达式来选择 xml 文档中的节点
在 xpath 语法中:

//:获取 HTML 页面中所有节点
//[ 指定节点 ]:获取 HTML 页面中指定节点。比如 //ul 表示获取 HTML 页面所有 ul 节点
[@…] :匹配节点属性。比如 //
[@id=‘kw’] 表示匹配 HTML 页面中 id 属性为 kw 的节点

查找元素时,有时候会出现 NoSuchElementException,说明没找到元素,下面给出排查步骤:

  1. 在报错代码前添加 Thread.sleep(),设置的时间长一点
  2. 执行自动化,在自动化打开的页面中打开前端开发者工具,手动检查元素是否真的不存在
    如果自动化打开的页面确实不存在该元素,有两种可能:
    ① 手动打开的页面和自动化打开的页面不一样(很可能是登陆和未登录状态下页面不一样)
    ② 元素为动态元素
    如果元素是动态元素,那我们可以先定位动态元素的上一级标签,再增加要定位的元素标签,例如driver.findElement(By.cssSelector(“body > div > section article”));。
    如果自动化打开的页面有该元素,那就是因为代码执行的速度比页面渲染的速度快,页面还没渲染出来,程序就已经找到了,导致元素没有找到。这种情况的解决办法就是添加等待

操作测试对象

获取到页面元素之后,接下来就要对元素进行操作了。常见的操作有点击、提交、输入、清除、获取文本等

点击

//找到百度⼀下按钮并点击 
driver.findElement(By.cssSelector("#su")).click();

模拟按键输入

driver.findElement(By.cssSelector("#kw")).sendKeys("输入文字");

清除文本内容

比如在搜索框输入内容之后,想搜索其他关键词,那就需要用到 clear()

driver.findElement(By.cssSelector("#kw")).sendKeys("哔哩哔哩"); 
driver.findElement(By.cssSelector("#kw")).clear(); 
driver.findElement(By.cssSelector("#kw")).sendKeys("百度贴吧");

获取文本信息&属性值

如何判断获取到的元素对应的文本是否符合预期呢?此时我们需要获取元素对应的文本并打印⼀下

String bdtext = driver.findElement(By.xpath("//*[@id="title-content"]/span[1]")).getText();
System.out.println("获取到的内容是:"+bdtext); 

获取属性值使用方法 getAttribute("属性名称")

其他

获取当前页面标题:getTitle()
获取当前页面 URL:getCurrentUrl()


窗口

当我们进行手工测试时,我们可以通过肉眼来判断当前在哪个窗口,但对于程序来说它是不知道当
前最新的窗口是哪一个。那程序怎么识别每一个窗口呢?
每个浏览器窗口都有一个唯一的属性——句柄(handle),我们可以通过句柄来切换窗口

切换窗口

  1. 获取当前页面句柄
driver.getWindowHandle(); 
  1. 获取所有页面句柄:
driver.getWindowHandles();
  1. 将当前句柄切换为最新页面的
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))

截屏

自动化脚本一般是部署在机器上自动运行的,如果出现了报错,我们是不知道的,可以通过抓拍来记录当时错误的场景
屏幕截图方法需要额外导入包:

<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> 
</dependency>
public void getScreenShot(String str) throws IOException {// 创建日期格式化对象SimpleDateFormat sim1 = new SimpleDateFormat("yyyy-MM-dd");SimpleDateFormat sim2 = new SimpleDateFormat("HHmmssSS");// 通过时间来给截图文件命名,这样可以避免文件名覆盖的问题// 获取当前时间并分别进行格式化。dirTime 格式化为 "yyyy-MM-dd"String dirTime = sim1.format(System.currentTimeMillis());String fileTime = sim2.format(System.currentTimeMillis());// 构建截图文件的文件名String filename = "./src/test/image/" + dirTime + "/" + str + "-" + fileTime + ".png";System.out.println("filename:" + filename);File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);// 把 srcFile 放到指定位置FileUtils.copyFile(srcFile,new File(filename));
}

等待

强制等待

Thread.sleep(毫秒);

优点:使用简单,调试的时候比较有效
缺点:影响运行效率,浪费大量的时间。所以一般用于调试

隐式等待

隐式等待是⼀种智能等待,用于解决元素未完全加载时 WebDriver 查找和操作元素的问题。它可以规定在查找元素时,在指定时间内不断尝试查找元素。如果找到则代码继续执行,超时没找到元素则抛出 NoSuchElementException

implicitlyWait(Duration 类中提供的毫秒、秒、分钟等方法);
//隐式等待 1000 毫秒 
driver.manage().timeouts().implicitlyWait(Duration.ofMillis(1000)); 
//隐式等待 5 秒 
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));

隐式等待的作用域是整个脚本所有元素,也就是说每次查找元素都需要等待,这样就很浪费时间
注意:隐式等待对非 HTML 页面的元素是不生效的。比如弹窗是无法等待的


显式等待

显式等待也是一种智能等待,在指定超时时间的范围内只要满足条件就会继续执行后续的代码
可以看到这里面提供了很多种条件,不用刻意去记,多用用就熟悉了

在这里插入图片描述


浏览器导航

打开网站:

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

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

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

关于页面的刷新,这里需要补充一下,就是如果在一个页面有输入内容(比如登录页输入账号密码),希望清除掉输入框中内容的话,可以选中输入框然后 clear,也可以直接 refresh 页面


弹窗

弹窗不属于页面的元素,需要使用 selenium 提供的 Alert 接口来定位

  1. 警告 & 确认弹窗
    在这里插入图片描述
Alert alert = driver.switchTo.alert(); 
//点击确定
alert.accept() 
//点击取消
alert.dismiss()
  1. 提示弹窗
    这种弹窗一般需要输入内容

在这里插入图片描述

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

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

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

相关文章

【M365运维】在SPO文档库里删除文档时,遇到文档被签出无法删除。

【问题】SPO的存储空间剩的不多了&#xff0c;在清理文档库时&#xff0c;遇到有些文档被签出但用户已经离职&#xff0c;删除文件时报错。 【解决】翻SPO的设置时&#xff0c;看到有“管理没有已签入版本的文件”&#xff0c;在里面获取文件的所有权之后就可以删除了。 具体…

【树莓派5B】IO串口通信使用

超级简单的串口使用 前言零、检查准备&#xff08;可略&#xff09;0.1 查看UART引脚&#xff1a;0.2 扩展一下引脚查看的方法 一、配置准备1.1 检查端口配置1.2 查看串口映射1.3 下载minicom串口调试工具1.4 通过命令获取串口上的数据 二、python的serial进行收发测试总结 前言…

sqli-labs靶场第二关less-2

sqli-labs靶场第二关less-2 本次测试在虚拟机搭建靶场&#xff0c;从主机测试 1、输入?id1和?id2发现有不同的页面回显 2、判断注入类型 http://192.168.128.3/sq/Less-2/?id1’ 从回显判断多一个‘ &#xff0c;预测可能是数字型注入 输入 http://192.168.128.3/sq/Less…

Study-Oracle-10-ORALCE19C-RAC集群维护

一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人。 一、RAC的逻辑架构与进程 1、RAC 与单实例进程的对比 2、RAC相关进程功能 3、在主机查看RAC后台进程 快捷键设置 alias sqlplus=rlwrap sqlplus alias rman=rlwrap rman alias crsctl=/u01/app…

使用springCache实现缓存

简介 这个springCache貌似jdk8或者以上才可以 cache最好加在controller层&#xff0c;毕竟返回给前端的数据&#xff0c;在这一步才是最完整的&#xff0c;缓存controller的数据才有意义 配置 导入依赖 <dependency><groupId>org.springframework.boot</groupId…

基于Python的美术馆预约系统【附源码】

效果如下&#xff1a; 系统首页界面 系统注册页面 美术馆详细页面 公告信息详细页面 后台登录界面 管理员主界面 美术馆管理界面 预约参观管理界面 研究背景 随着文化娱乐活动的日益丰富&#xff0c;美术馆作为展示艺术作品、传播文化的重要场所&#xff0c;其管理和服务模式…

go语言protoc的详细用法与例子

一. 原来的项目结构 二. 选择源proto文件及其目录&目的proto文件及其目录 在E:\code\go_test\simple_demo\api 文件夹下&#xff0c;递归创建\snapshot\helloworld\v1\ad.pb.go E:\code\go_test\simple_demo> protoc --go_outpathssource_relative:./api .\snapshot\h…

Dolma:包含三万亿Token的语言模型预训练研究开放语料库

前言 原论文&#xff1a;Dolma: an Open Corpus of Three Trillion Tokens for Language Model Pretraining Research 摘要 关于训练当前最佳性能语言模型的预训练语料库的信息很少被讨论——商业模型很少详细说明它们的数据&#xff0c;即使是开源模型也往往在没有训练数据…

Ubuntu开机进入紧急模式处理

文章目录 Ubuntu开机进入紧急模式处理一、问题描述二、解决办法参考 Ubuntu开机进入紧急模式处理 一、问题描述 Ubuntu开机不能够正常启动&#xff0c;自动进入紧急模式&#xff08;You are in emergency mode&#xff09;。具体如下所示&#xff1a; 二、解决办法 按CtrlD进…

《机器学习》周志华-CH10(降维与度量学习)

10.1k近邻学习 k k k近邻(k-Nearest Neighbor,简称kNN)&#xff0c;监督学习。 工作机制&#xff1a;给定测试样本&#xff0c;基于某种距离度量找出训练集中与其最靠近的 k k k个训练样本&#xff0c;基于这些”邻居“预测。 { 分类任务&#xff1a;选择”投票法“。 k 个样本…

MySQL之复合查询与内外连接

目录 一、多表查询 二、自连接 三、子查询 四、合并查询 五、表的内连接和外连接 1、内连接 2、外连接 前面我们讲解的mysql表的查询都是对一张表进行查询&#xff0c;即数据的查询都是在某一时刻对一个表进行操作的。而在实际开发中&#xff0c;我们往往还需要对多个表…

如何使用MATLAB代码生成器生成ADRC跟踪微分器(TD) PLC源代码(SCL)

ADRC线性跟踪微分器TD详细测试 ADRC线性跟踪微分器TD详细测试(Simulink 算法框图+CODESYS ST+博途SCL完整源代码)-CSDN博客文章浏览阅读383次。ADRC线性跟踪微分器(ST+SCL语言)_adrc算法在博途编程中scl语言-CSDN博客文章浏览阅读784次。本文介绍了ADRC线性跟踪微分器的算法和…

Bolt.new:终极自动化编程工具

兄弟们&#xff0c;终极写代码工具来了—— Bolt.new&#xff01;全方位的编程支持&#xff1a; StackBlitz 推出了 Bolt․new&#xff0c;这是一款结合了 AI 与 WebContainers 技术的强大开发平台&#xff0c;允许用户快速搭建并开发各种类型的全栈应用。 它的主要特点是无需…

Anaconda的安装与环境设置

文章目录 一、Anaconda介绍二、Anaconda环境搭建1. 下载Anaconda(1)官网下载(2)清华大学镜像 2. 安装Anaconda3.配置环境变量4.检验conda是否安装成功5.更改镜像源6.若菜单栏没有conda prompt 三、虚拟环境1.创建、查看、删除虚拟环境2.激活、退出虚拟环境 四、CUDA、Pytorch、…

JS 入门

文章目录 JS 入门一、JS 概述1、JS 特点2、JS 组成3、JS 初体验4、HTML引入JS 二、JS 基础语法1、变量声明2、基本数据类型3、引用数据类型1&#xff09;数组2&#xff09;对象3&#xff09;函数4&#xff09;null 4、运算符5、条件判断6、循环语句 三、JS 函数0、JS 函数特点1…

上传文件失败,请检查阿里云配置信息:[The specified bucket is not valid.

-- 十一假期结束 -- 去年今日此门中&#xff0c;人面挑花相应红。 -- 人面不知何处去&#xff0c;桃花依旧笑春风。

Pikachu-unsafe upfileupload-getimagesize

什么是getimagesize()&#xff1f; getimagesize()是PHP中用于获取图像的大小和格式的函数。它可以返回一个包含图像的宽度、高度、类型和MIME类型的数组。 由于返回的这个类型可以被伪造&#xff0c;如果用这个函数来获取图片类型&#xff0c;从而判断是否时图片的话&#xff…

虚拟机 VMware 安装 macOS

macOS 界面 MAC OS IOS下载&#xff1a; amacOS Monterey by Techrechard.comwmacOS Monterey by Techrechard.com 下载&#xff1a;Unlocker-v2.0.1-x64 Mac OS X 虚拟机中更改屏幕分辨率 终端输入命令&#xff1a; sudo defaults write /Library/Preferences/com.apple.w…

vim编辑器安装,并修改配置使其默认显示行数

centOS默认是未安装vim编辑器的&#xff0c;而vim编辑器相比vi编辑器更易用一些&#xff0c;如需使用vim编辑器&#xff0c;需要进行安装。 1.需要先配置本地yum源&#xff0c;参见如下链接&#xff1a; 点击查看如何配置本地yum源 2.安装vim编辑器&#xff0c;并修改配置。…

kafka和zookeeper单机部署

安装kafka需要jdk和zookeeper环境&#xff0c;因此先部署单机zk的测试环境。 zookeeper离线安装 下载地址&#xff1a; zookeeper下载地址&#xff1a;Index of /dist/zookeeper 这里下载安装 zookeeper-3.4.6.tar.gz 版本&#xff0c;测试环境单机部署 上传服务器后解压缩 …