Java测试——selenium具体操作

news2024/11/26 22:32:35

selenium的前置准备工作可以参考我之前的博客:Java测试——selenium的安装与使用教程

这篇博客讲解一下selenium的常见操作

先创建driver

ChromeDriver driver = new ChromeDriver();

输入网址

driver.get("https://www.baidu.com");

常见操作

查找元素

我们可以通过下面这个方法查找页面的一个元素

driver.findElement(By.cssSelector(""))

该方法返回一个WebElement元素

例如,我们查找百度的搜索框

WebElement element = driver.findElement(By.cssSelector("#kw"));

也可以通过下面这个方法查找页面中多个元素

findElements()

输入文本

通过对WebElement元素调用下面这个方法来输入文本

sendKeys();

例如,我们在搜索框中输入蔡徐坤

driver.findElement(By.cssSelector("#kw")).sendKeys("蔡徐坤");

点击click

我们可以通过对WebElement元素调用下面这个方法来实现在网站中点击该元素

click();

例如我们点击百度中的百度一下按钮

driver.findElement(By.cssSelector("#su")).click();

提交submit

我们可以通过对WebElement元素调用下面这个方法来实现提交该表单元素

submit();

例如我们提交百度一下的表单

driver.findElement(By.cssSelector("#su")).submit();

清除clear

我们可以通过对WebElement元素调用该方法,来实现清除之前的输入

clear();

例如,我们可以清除之前在输入框中的输入

driver.findElement(By.cssSelector("#kw")).clear();

获取文本

我们可以对WebElement元素调用该方法,获取元素中的文本,最终返回一个字符串

getText();

例如获取下面这个热搜中的文本,将其打印在控制台上
在这里插入图片描述

System.out.println(driver.findElement(By.cssSelector("#hotsearch-content-wrapper > li:nth-child(2) > a > span.title-content-title")).getText());

获取属性

而如果我们尝试获取百度一下按钮中的文字,会发现无法获取到文字,这是因为百度一下是value这个键对应的值,我们可以通过调用下面这个方法,实现获取WebElement元素相应的键对应的值,其结果为字符串

getAttribute();

例如,我们可以获取输入框的相关键对应的值

System.out.println(driver.findElement(By.cssSelector("#su")).getAttribute("value"));
System.out.println(driver.findElement(By.cssSelector("#su")).getAttribute("id"));
System.out.println(driver.findElement(By.cssSelector("#su")).getAttribute("class"));
System.out.println(driver.findElement(By.cssSelector("#su")).getAttribute("type"))

获取页面标题

这里的“百度一下,你就知道”,就是我们当前页面的标题
在这里插入图片描述

我们可以通过下面这个方法来获取当前页面的标题,其结果返回一个字符串

getTitle();

例如我们将该页面标题打印到控制台上

System.out.println(driver.getTitle())

获取页面url

这里的内容,就是当前页面的url
在这里插入图片描述
我们通过下面这个方法来获取当前页面的url,其结果返回一个字符串

System.out.println(driver.getCurrentUrl())

窗口

调整窗口大小

将窗口最大化

driver.manage().window().maximize();

将窗口最小化

driver.manage().window().minimize();

将窗口全屏显示

driver.manage().window().fullscreen();

手动设置窗口大小(第一个元素是宽度,第二个元素是高度)

driver.manage().window().setSize(new Dimension(1024,2048));

窗口的切换

如果我们使用自动化程序,点击“图片”超链接,进入到百度图片的页面,然后获取百度一下按钮,就会发现结果报错了
在这里插入图片描述

在这里插入图片描述
具体实现代码如下:

driver.get("https://www.baidu.com");
driver.findElement(By.cssSelector("#s-top-left > a:nth-child(6)")).click();
driver.findElement(By.cssSelector("#homeSearchForm > span.s_btn_wr > input"));
driver.quit();

最终程序报错,没有找到“百度一下”按钮
在这里插入图片描述

通过回顾刚才的图片可以看到,我们这时开了两个窗口,而自动化程序现在操作的还是第一个窗口,因此访问不到百度图片的“百度一下”

事实上,每打开一个标签页,浏览器就会自动给标签页一个标识:句柄

我们可以通过下面这个方法获取所有界面的句柄,其结果为Set< String >

getWindowHandles();

也可以只获取当前页面的句柄打印出来

System.out.println(driver.getWindowHandle());

我们可以通过下面这个操作来获取所有页面的句柄,将他们打印出来

Set<String> handles = driver.getWindowHandles();
for (String handle:handles) {
    System.out.println(handle);
}

可以使用下面这个方法,传输一个句柄,来切换页面

driver.switchTo().window(handle);

屏幕截图

如果我们自动化实现在百度中搜索蔡徐坤,并且点击下图中这个名字
在这里插入图片描述
具体代码如下

driver.get("https://www.baidu.com");
driver.findElement(By.cssSelector("#kw")).sendKeys("蔡徐坤");
driver.findElement(By.cssSelector("#su")).click();
driver.findElement(By.cssSelector("#\\31  > div > div > div > div > div.cos-row.row-text_Johh7.row_5y9Az > div > a > div > p > span > span"));
driver.quit();

最终会发现代码报错,没有找到该元素
在这里插入图片描述
我们可以使用屏幕截图,看一下当前页面是什么样子

使用下面的方法,可以将当前界面截屏为java中的file对象

getScreenshotAs(OutputType.FILE);

我们可以将file对象拷贝为已有的文件,实现将屏幕截图放到指定路径下的操作

首先导入依赖

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
</dependency>

使用下面这个代码,可以实现拷贝文件操作

FileUtils.copyFile(源文件, 目标文件);

完整代码如下:

driver.get("https://www.baidu.com");
driver.findElement(By.cssSelector("#kw")).sendKeys("蔡徐坤");
driver.findElement(By.cssSelector("#su")).click();

File srcFile = driver.getScreenshotAs(OutputType.FILE);
//将屏幕截图放到指定路径下
String filename = "my.png";
FileUtils.copyFile(srcFile, new File(filename));

driver.findElement(By.cssSelector("#\\31  > div > div > div > div > div.cos-row.row-text_Johh7.row_5y9Az > div > a > div > p > span > span"));
driver.quit();

加上上述代码,我们看一下浏览器当前的样子
在这里插入图片描述
可以发现,浏览器还没有渲染完毕,我们的代码就开始执行查找元素了,因此会发生找不到的情况

因此,我们只需要加上休眠时间,让浏览器有时间渲染即可

让浏览器休眠3秒

Thread.sleep(3000);

可以看到,这时渲染的画面是正常的
在这里插入图片描述

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

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

相关文章

[数据分析] 数据指标体系搭建

在数据分析的学习过程中&#xff0c;我们通常会要求掌握以下两点: 1.理解数据&#xff0c;懂得从数据中发现业务指标(学会如何去看懂数据) 2.使用相关指标去分析数据&#xff0c;同时使用多个指标去分析一个问题(了解常见的指标) 当我们拿到数据(通常以Excel或者数据库方式去…

机器学习评估指标的十个常见面试问题

评估指标是用于评估机器学习模型性能的定量指标。它们提供了一种系统和客观的方法来比较不同的模型并衡量它们在解决特定问题方面的成功程度。通过比较不同模型的结果并评估其性能可以对使用哪些模型、如何改进现有模型以及如何优化给定任务的性能做出正确的决定&#xff0c;所…

java世界String的那些事

String的创建机理&#xff1a; 由于String在Java世界中使用过于频繁&#xff0c;Java为了避免在一个系统中产生大量的String对象&#xff0c;引入了字符串常量池。其运行机制是&#xff1a;创建一个字符串时&#xff0c;首先检查池中是否有值相同的字符串对象&#xff0c;如果…

【Nacos】Nacos配置中心客户端配置更新源码分析

上文我们说了服务启动的时候从远程Nacos服务端拉取配置&#xff0c;这节我们来说下Nacos服务端配置的变动怎么实时通知到客户端&#xff0c;首先需要注册监听器。 注册监听器 NacosContextRefresher类会监听应用启动发布的ApplicationReadyEvent事件&#xff0c;然后进行配置…

现在00后也这么卷?部门刚来的00后软件测试工程师已经要把我卷崩溃了...

都说00后躺平了&#xff0c;但是有一说一&#xff0c;该卷的还是卷。这不&#xff0c;刚开年我们公司来了个00后&#xff0c;工作没两年&#xff0c;跳槽到我们公司起薪18K&#xff0c;都快接近我了。后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了。 最…

sqlmap对http请求头扫描,爬取数据库数据

做安全测试时&#xff0c;先用appscan扫描目标网站&#xff0c;爆出sql盲注的风险 然后使用sqlmap专业工具来扫描分析漏洞 GitHub - sqlmapproject/sqlmap: Automatic SQL injection and database takeover toolAutomatic SQL injection and database takeover tool - GitHub …

Mysql 部署 MGR 集群

0. 参考文章 官方文档&#xff1a; MySQL :: MySQL 8.0 Reference Manual :: 18.2 Getting Started 博客&#xff1a; MGR 单主模式部署教程&#xff08;基于 MySQL 8.0.28&#xff09; - 墨天轮 (modb.pro) mysql MGR单主模式的搭建 - 墨天轮 (modb.pro) MySQL 5.7 基于…

Vue2之完整基础介绍和指令与过滤器

Vue2之基础介绍和指令与过滤器一、简介1、概念2、vue的两个特性2.1 数据驱动视图2.2 双向数据绑定3、MVVM二、vue基础用法1、导入vue.js的script脚本文件2、在页面中声明一个将要被vue所控制的DOM区域3、创建vm实例对象&#xff08;vue实例对象&#xff09;4、样例完整代码三、…

Oracle Dataguard(主库为 Oracle rac 集群)配置教程(02)—— Oracle RAC 主库的相关操作

Oracle Dataguard&#xff08;主库为 Oracle rac 集群&#xff09;配置教程&#xff08;02&#xff09;—— Oracle RAC 主库的相关操作 / 本专栏详细讲解 Oracle Dataguard&#xff08;Oracle 版本为11g&#xff0c;主库为双节点 Oracle rac 集群&#xff09;的配置过程。主要…

数据库 与 数据仓库的本质区别是什么?

当用计算机来处理数据的时候, 数据就需要存储和管理了。早期的数据, 就是用一个文件来实现的, 即是文件系统。随着处理的数据量增大, 发展到用数据库来管理和存储数据了。 数据库包括多媒体数据库、对象关系数据库和关系数据库。关系数据库管理系统,已经成为了事实上通用的数据…

FANUC机器人UI[4]_CSTOPI循环停止信号使用时的注意事项

FANUC机器人UI[4]_CSTOPI循环停止信号使用时的注意事项 前面已经和大家介绍了关于FANUC机器人的UOP信号的具体功能,具体可参考以下链接中的内容: FANUC机器人UOP信号(UI+UO)功能详细介绍 本次关于FANUC机器人的UI[4] CSTOPI循环停止信号使用时的注意事项进行一个补充说明。…

C语言-程序环境和预处理(14.2)

目录 预处理详解 1.预定义符号 2. #define 2.1 #define定义标识符 2.2 #define 定义宏 2.3 #define 替换规则 注意事项&#xff1a; 2.4 #和## 2.5 带副作用的宏参数 2.6 宏和函数对比 3. #undef 4. 条件编译 4.1 单分支条件编译 4.2 多分支条件编译 4.3 判断是…

基础篇:01-微服务概述

1.单体应用与微服务架构区别 如上图左侧为单体应用架构。在传统单体应用中&#xff0c;所有功能模块都在一个工程中编码、部署&#xff0c;即使是集群部署&#xff0c;也只是单体应用的水平复制。 如上图右侧为微服务架构。在微服务架构的项目中&#xff0c;每个应用会按照领域…

浅谈保护数据的加密策略

加密是一种将信息从可读格式转换为混乱字符串的技术。这样做可以防止数据传输中的机密数据泄露。文档、文件、消息和所有其他形式的网络通信都可以加密。加密策略和身份验证服务的结合&#xff0c;还能保障企业机密信息只对授权用户开启访问权限。常见的数据加密包括以下两种&a…

定期备份日志并发送至存储服务器指定路径脚本

根据需求编写一个日志定时备份并发送至存储服务器的脚本定期把三天前的日志文件备份&#xff0c;打包发送至日志备份服务器指定目录&#xff08;修改对应路径拿走即用&#xff09;vim qingli.sh#!/bin/bash#定义星期几week$(date |awk NR1{print $4})num${week}#日志源目录log&…

Android MVI框架搭建与使用

MVI框架搭建与使用前言正文一、创建项目① 配置AndroidManifest.xml② 配置app的build.gradle二、网络请求① 生成数据类② 接口类③ 网络请求工具类三、意图与状态① 创建意图② 创建状态四、ViewModel① 创建存储库② 创建ViewModel③ 创建ViewModel工厂五、UI① 列表适配器②…

【3D目标检测】基于伪雷达点云的单目3D目标检测方法研宄

目录概述细节基准模型点云置信度生成网络特征聚合 DGCNN概述 本文是基于单目图像的3D目标检测方法&#xff0c;是西安电子科技大学的郭鑫宇学长的硕士学位论文。 【2021】【单目图像的3D目标检测方法】 细节 基准模型 作者还是按照伪雷达点云算法的流程设计的&#xff0c;并…

多传感器融合定位十四-基于图优化的定位方法

多传感器融合定位十四-基于图优化的定位方法1. 基于图优化的定位简介1.1 核心思路1.2 定位流程2. 边缘化原理及应用2.1 边缘化原理2.2 从滤波角度理解边缘化3. 基于kitti的实现原理3.1 基于地图定位的滑动窗口模型3.2 边缘化过程4. lio-mapping 介绍4.1 核心思想4.2 具体流程4.…

lamada表达式、stream、collect整理

lamada表达式格式 格式&#xff1a;( parameter-list ) -> { expression-or-statements } 实例&#xff1a;简化匿名内部类的写法 原本写法&#xff1a; public class LamadaTest { public static void main(String[] args) { new Thread(new Runnable() { …

基于PYTHON django四川旅游景点推荐系统

摘 要基于四川旅游景点推荐系统的设计与实现是一个专为四川旅游景点为用户打造的旅游网站。该课题基于网站比较流行的Python 语言系统架构,B/S三层结构模式&#xff0c;通过Maven项目管理工具进行Jar包版本的控制。本系统用户可以发布个人游记&#xff0c;查看景点使用户达到良…