Java测试——selenium具体操作
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);
可以看到,这时渲染的画面是正常的
相关文章:
Java测试——selenium具体操作
selenium的前置准备工作可以参考我之前的博客:Java测试——selenium的安装与使用教程 这篇博客讲解一下selenium的常见操作 先创建driver ChromeDriver driver new ChromeDriver();输入网址 driver.get("https://www.baidu.com");常见操作 查找元素…...
电子器件系列32:逻辑与门芯片74LS11
一、编码规则 先看看这个代码的意思:74LS11 74是一个系列(74 表示为工作温度范围,74: 0 ~ 70度。) ls的意思就是工艺类型(Bipolar(双极)工艺) 11是代码 什么是74系列逻辑芯片? - 知乎 什么是…...
LeetCode-101. 对称二叉树
目录题目分析递归法题目来源 101. 对称二叉树 题目分析 首先想清楚,判断对称二叉树要比较的是哪两个节点,要比较的可不是左右节点! 对于二叉树是否对称,要比较的是根节点的左子树与右子树是不是相互翻转的,理解这一…...
使用intlinprog求解指派问题MATLAB代码分享
% 输入指派矩阵C [3 8 2 10 3;8 7 2 9 7;6 4 2 7 5;8 4 2 3 5;9 10 6 9 10];f C(:); %生成一个列向量,作为目标函数系数,matlab默认以列排序[m,n] size(C);Aeq zeros(2*n,n*n); %2*n个等式约束,n*n个变量for i 1:n %这里先生成的是后5个…...
Spark On YARN时指定Python版本
坑很多,直接上兼容性最佳的命令,将python包上传到hdfs或者file:/home/xx/(此处无多余的/) # client 模式 $SPARK_HOME/spark-submit \ --master yarn \ --deploy-mode client \ --num-executors 2 \ --conf "spark.yarn.dist.archives<Python包…...
[数据库]库的增删改查
●🧑个人主页:你帅你先说. ●📃欢迎点赞👍关注💡收藏💖 ●📖既选择了远方,便只顾风雨兼程。 ●🤟欢迎大家有问题随时私信我! ●🧐版权:本文由[你帅…...
Wine零知识学习1 —— 介绍
一、什么是Wine Wine是“Wine Is Not an Emulator” 的首字母缩写,是一个能够在多种POSIX-compliant操作系统(诸如Linux、macOS及BSD等)上运行 Windows 应用的兼容层。Wine不像虚拟机或者模拟器那样模仿内部的Windows逻辑,而是將…...
设计模式--建造者模式 builder
设计模式--建造者模式 builder)建造者模式简介建造者模式--小例子(电脑购买)1.产品类2.抽象构建者3.实体构建类4.指导者类5.客户端测试类小结建造者模式简介 建造者模式有四个角色,概念划分如下: Product : 产品类&a…...
终于周末啦,继续来总结一下Python的一些知识点啦
目录 Python概念梳理 常见概念梳理 Python经典判断题 判断题 选择题 Python概念梳理 常见概念梳理 Python中,不仅仅变量的值是可以变化的,类型也是可以随时变化的 1、Python的变量必须初始化否则提示 is not defined 2、if、while中定义的变量在…...
CUDA By Example(八)——流
文章目录页锁定主机内存可分页内存函数页锁定内存函数CUDA流使用单个CUDA流使用多个CUDA流GPU的工作调度机制高效地使用多个CUDA流遇到的问题(未解决)页锁定主机内存 在之前的各个示例中,都是通过 cudaMalloc() 在GPU上分配内存,以及通过标准的C库函数 …...
02- pandas 数据库 (数据库)
pandas 数据库重点: pandas 的主要数据结构: Series (一维数据)与 DataFrame (二维数据)。 pd.DataFrame(data np.random.randint(0,151,size (5,3)), # 生成pandas数据 index [Danial,Brandon,softpo,Ella,Cindy], # 行索引 …...
less常用语法总结
CSS预处理器 CSS 预处理器是什么?一般来说,它们基于 CSS 扩展了一套属于自己的 DSL,来解决我们书写 CSS 时难以解决的问题: 语法不够强大,比如无法嵌套书写导致模块化开发中需要书写很多重复的选择器;没有变量和合理的样式复用机制,使得逻辑上相关的属性值必须以字面量…...
DHCP Relay中继实验
DHCP Relay实验拓扑图设备配置结果验证拓扑图 要求PC1按照地址池自动分配,而PC要求分配固定的地址,网段信息已经在图中进行标明。 设备配置 AR1: AR1作为DHCP Server基本配置跟DHCP Server没区别,不过要加一条静态路由ÿ…...
“1+1>2”!《我要投资》与天际汽车再度“双向奔赴”!
文|螳螂观察 作者| 图霖 胡海泉老师重磅回归、创始人现场真情告白……新一季的《我要投资》,不仅维持了往季在专业度上的高水准,也贡献了不少高话题度的“出圈”时刻。 在竞争激烈的的综艺节目竞技场,能举办数季的节目,往往都是…...
【分享】订阅金蝶KIS集简云连接器同步OA付款审批数据至金蝶KIS
方案简介 集简云基于钉钉连接平台完成与钉钉的深度融合,实现钉钉OA审批与数百款办公应用软件(如金蝶KIS、用友等)的数据互通,让钉钉的OA审批流程与企业内部应用软件的采购、付款、报销、收款、人事管理、售后工单、立项申请等环节…...
dubbo服务消费
dubbo在服务消费时调用的方法栈比较深,所以得一边看一边记,还是比较费力的。在dubbo服务发现中,我们看到通过ReferenceConfig#get()返回的是要调用接口的代理对象,因此通过接口的代理对象调用方法时是调用InvocationHandler(Invok…...
Python调用API接口,实现人脸识别
人生苦短,我用Python 在开始之前,先问问大家: 什么是百度Aip模块? 百度AI平台提供了很多的API接口供开发者快速的调用运用在项目中 本文写的是使用百度AI的**在线接口SDK模块(baidu-aip)**进行实现人脸识…...
2月10日刷题总结
编辑距离题目描述设 AA 和 BB 是两个字符串。我们要用最少的字符操作次数,将字符串 AA 转换为字符串 BB。这里所说的字符操作共有三种:删除一个字符;插入一个字符;将一个字符改为另一个字符。A, BA,B 均只包含小写字母。输入格式第…...
C++学习/温习:新型源码学编程(三)
写在前面(祝各位新春大吉!兔年如意!) 【本文持续更新中】面向初学者撰写专栏,个人原创的学习C/C笔记(干货)所作源代码输出内容为中文,便于理解如有错误之处请各位读者指正请读者评论回复、参与投票…...
阿里云ecs服务器搭建CTFd(ubuntu20)
1.更新apt包索引 sudo apt-get update更新源 1、使用快捷键【ctrlaltt】打开终端。 2、输入以下命令备份原有软件源文件。 cp /etc/apt/sources.list /etc/apt/sources.list.bak_yyyymmdd 3、再输入以下命令打开sources.list文件并添加新的软件源地址。 vim /etc/apt/sources.…...
视频号小店新订单如何实时同步企业微信
随着直播带货的火热,视频号小店也为商家提供商品信息服务、商品交易,支持商家在视频号运营电商,许多企业也将产品的零售路径渗透至视频号小店中了。如果我们希望在视频号小店接收到订单后,能尽快及时发货,给用户较好的…...
ag-Grid Enterprise
ag-Grid Enterprise Ag-Grid被描述为一种商业产品,已在EULA下分发,它非常先进,性能就像Row分组一样,还有范围选择、master和case、行的服务器端模型等等。 ag Grid Enterprise的巨大特点: 它具有以下功能和属性&#x…...
扫雷——C语言【详解+全部码源】
前言:今天我们学习的是C语言中另一个比较熟知的小游戏——扫雷 下面开始我们的学习吧! 文章目录游戏整体思路游戏流程游戏菜单的打印创建数组并初始化布置雷排查雷完整代码game.hgame.ctest.c游戏整体思路 我们先来看一下网上的扫雷游戏怎么玩 需要打印…...
【C++】类和对象(下)
文章目录1. 再谈构造函数1.1 初始化列表1.2 explicit关键字2. static成员2.1 概念2.2 特性3. 友元3.1 友元函数3.1 友元类4. 内部类5. 匿名对象6. 拷贝对象时的一些编译器优化7. 再次理解类和对象1. 再谈构造函数 1.1 初始化列表 在创建对象时,编译器通过调用构造…...
计算机网络
TCP和UDP TCP如何保证传输的可靠性 基于数据块传输:应用数据被分割成TCP认为最适合的数据块,传输给网络层,称为报文段连接管理:三次握手和四次挥手对失序数据包重新排序以及去重:每个数据包有一个序列号,…...
【Unity VR开发】结合VRTK4.0:将浮点操作转换为布尔操作
语录: 奈何桥上奈何愁,奈何桥下浣溪流,奈何人人奈何泪,奈何奈何洗春秋。 前言: 有时,您可能希望使用 一个值来激活或停用操作类型。例如,按下控制器上的扳机轴会导致在完全按下扳机时发生操作。…...
error when starting dev server:Error: Failed to resolve vue/compiler-sfc.
对于node 的包管理工具,我一般习惯用 yarn,但是最近使用 yarn 创建前端项目的时候出了一些问题。yarn create vite vite-project报错如下:error when starting dev server:Error: Failed to resolve vue/compiler-sfc.vitejs/plugin-vue requ…...
Vue2之完整基础介绍和指令与过滤器
Vue2之基础介绍和指令与过滤器一、简介1、概念2、vue的两个特性2.1 数据驱动视图2.2 双向数据绑定3、MVVM二、vue基础用法1、导入vue.js的script脚本文件2、在页面中声明一个将要被vue所控制的DOM区域3、创建vm实例对象(vue实例对象)4、样例完整代码三、…...
JY-7A/3DK/220 19-130V静态【电压继电器】
系列型号 JY-7A/1DK不带辅助电源电压继电器;JY-7B/1DK不带辅助电源电压继电器; JY-7/1DK/120不带辅助电源电压继电器;JY-7/1DK/120不带辅助电源电压继电器; JY-7A/1DKQ不带辅助电源电压继电器;JY-7B/1DKQ不带辅助电源…...
[ECCV 2018] Learning to Navigate for Fine-grained Classification
Contents MethodNavigator-Teacher-Scrutinizer Network (NTS-Net)Navigator and TeacherScrutinizerNetwork architectureJoint training algorithmExperimentReferencesMethod Navigator-Teacher-Scrutinizer Network (NTS-Net) Approach Overview:NTS-Net 在不使用额外的 …...
做网站开店/千度seo
DHT11简介 DHT11 与单片机之间能采用简单的单总线进行通信,仅仅需要一个 I/O 口。 传感器内部湿度和温度数据 40Bit 的数据一次性传给单片机 DHT11 的技术参数如下: 工作电压范围: 3.3V-5.5V 工作电流 :平均 0.5mA …...
惠州网站建设制作/网站建设公司大型
一、链表题目 1、从尾到头打印链表 使用栈(也可以使用数组,逆序输出) /** * public class ListNode { * int val; * ListNode next null; * * ListNode(int val) { * this.val val; * } * …...
夏邑县百城建设提质网站/广告营销策略
今天突然对Android的自动化测试有点儿感兴趣,google了下,发现自动化测试的工具还真不少,有Monkey,MonkeyRunner,Robotium等太多了,前段时间也看到了 风泊海上 写的《Android自动化测试之Robotium学习》的博文,呵呵感觉…...
wordpress 增加小工具/百度指数里的资讯指数是什么
一次性餐巾市场的企业竞争态势 该报告涉及的主要国际市场参与者有P&G、Kimberly-Clark、Georgia-Pacific、Metsa、Specialty Coffee Association、Hengan Group、Prestige Linens、Oji Holdings、Vinda International、Zhongshun Paper Industry、Guangdong Zhongshun Pape…...
百度建设网站的目的/网络营销教案ppt
rvm 全称Ruby Version Manager, 确实是一个非常好用的ruby版本管理以及安装工具.下面介绍一下rvm的安装, 使用rvm, 安装ruby, 以及gem的使用.一、安装rvm官方网站上介绍得很简单, 但是使用官方网站安装会出现问题, SSL的问题. 所以我分两步进行, 第一步下载安装脚本. 第二步修…...
设计官网收费标准/南京seo排名扣费
题库来源:安全生产模拟考试一点通公众号小程序 2022年制冷与空调设备运行操作操作证考试题库系制冷与空调设备运行操作考题高频考题覆盖!2022制冷与空调设备运行操作考试模拟100题及在线模拟考试根据制冷与空调设备运行操作考试大纲。制冷与空调设备运行…...