Selenium框架的使用心得(一)

最近使用selenium框架实现业务前端的UI自动化,在使用selenium时,有一些心得想要和大家分享一下~

Selenium是一款用于web应用程序测试的工具,常用来实现稳定业务的UI自动化。这里,不想对其发展历史做介绍,也不想用官方语言去描述。简单的一句话总结其运行的基本原理:适配于对应浏览器的webdriver驱动解析自动化执行脚本,按其规定的方式操作浏览器。

到这里,我们也大致了解selenium是干什么用的,那么接下来直接切入主题,和大家分享我在做UI自动化的时候总结出的一些小知识点,我想这些小知识点对于想要快速入门selenium的同学或者初级使用者多少有点帮助。

1 如何搭建环境

使用selenium的环境具体需要:jdk+浏览器驱动+浏览器。由于本业务选择使用java语言实现ui自动化,因此需要用到jdk。目前selenium支持的主流的浏览器有chrome,ie,firefox等,需要注意的是,下载好浏览器之后,必须下载适应版本的浏览器驱动方可操作浏览器。

2 哪些方式用来定位元素

目前最常用定位元素有以下7种方式:

2.1>根据元素的name属性进行定位

webDriver.findElement(By.name("phrase"));

2.2>根据文本链接进行定位

webDriver.findElement(By.linkText("发表"));

2.3>根据元素的id属性进行定位

webDriver.findElement(By.id("title"));

2.4>根据元素的class属性进行定位

webDriver.findElement(By.className("note-editable"));

2.5>根据css定位元素,css属性定位能够灵活地选择控件的任意属性。

webDriver.findElement(By.cssSelector("li:nth-child(2)")).click();

2.6>根据元素的标签名进行定位

webDriver.findElement(By.tagName("phrase"));

2.7>根据xpath的绝对路径或者相对路径进行定位,这种定位方式最精准,最可靠。

driver.findElement(By.xpath("//img[@alt='div1-img1']"));

3 如何控制时间并有效的定位元素

使用selenium最常见的问题就是找不到元素,而找不到元素的绝大部分原因就是在一定时间内,元素没有加载出来导致。因此,控制好时间对于有效的定位元素很有帮助。selenium中常见的时间控制手段有三种:

3.1>使用线程控制,如:Thread.sleep(ms)。该种控制方式效果好,但是不够灵活,即使元素已经定位到,也需要耗完指定的时间。

3.2>隐式等待控制,如:webDriver.manage().timeouts.implicitlyWait(10,TimeUnit.SECONDS)。隐式等待也叫全局等待,webDriver实例的所有findElement都会有该设定时长的等待,作用域大,但灵活性不够。

3.3>显示等待控制,如:

显示等待作用于单个元素上,明确的要等到某个元素的出现,除非在规定的时间之内没找到,那么就抛出异常。显然,该方式使用更加灵活,而且显示等待只需找到元素即可运行程序的下一步,比之线程,能够节省时间。

4 如何确定元素是否存在

一般有两种手段:

4.1>使用try catch捕获元素定位不到抛出的异常。可见下图


4.2>使用selenium api自带函数。见下图:

5 如何切换窗口

ui自动化操作常涉及页面跳转等操作,很多时候会打开新的窗口,这时,webdriver实例会发生改变,如果想继续准确定位元素,这就需要切换窗口。切换可以通过switchTo()函数来控制,可见如下实例(适用于只有两个窗口的其他窗口切换):

6 如何使用无页面模式

由于本项目ui自动化需要部署到centos服务器上,所以需要使用无页面模式。目前,有chrome,firefox两种浏览器支持无页面模式,那么,如何使用无页面模式了?其实,只需要在生成webdriver实例时,指定无页面模式属性即可。

chromeOptions.addArguments("headless");//无界面参数

7 如何滑动页面

有时,为了使得需要点击的元素出现在视图内,通常需要滑动页面,而在selenium中可以通过控制执行脚本来实现。

((JavascriptExecutor) webDriver).executeScript("window.scrollBy(0, 7000)");

8 如何实现无验证码登陆

通过模式识别等方案去实现验证码获取进而登录网站的方式不够成熟可靠。目前较为可靠的一种方式,利用已登录网站的cookie来替代无验证码登录,具体实现方式可参考下图:

9 如何截取全图

有时,需要将运行中的图片截出来,用以直观的定位业务的问题,可以使用如下方式

10 如何关闭窗口

使用完webdriver后,需要关闭窗口。关于关闭窗口,有两种形式:

10.1> webdriver.close():用来关闭当前窗口。

10.2> webdriver.quit():用来退出驱动并关闭所有关联的窗口。

11 如何实现页面刷新

对于页面刷新操作不妨使用下面几种方法:

driver.navigate().refresh();

driver.get(driver.getCurrentUrl());

driver.navigate().to(driver.getCurrentUrl());

driver.executeScript("history.go(0)");

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

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

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

相关文章

08‐Mysql全局优化与Mysql 8.0新特详解

文章目录 Mysql全局优化总结配置文件my.ini或my.cnf的全局参数最大连接数允许用户连接的最大数量MySQL能够暂存的连接数量JDBC连接空闲等待时长client连接空闲等待时长innodb线程并发数innodb存储引擎buffer pool缓存大小行锁锁定时间redo log写入策略binlog写入磁盘机制排序线…

优化大数据接口请求

①前情概要:当加载后端的一个接口或去请求一个网站内容比较多时【比如内容大概1.5M】 ②问题:加载时间将非常长,页面白屏时间非常长 1、场景复现 (1)以天行API请求为例子 async function loadData(){// 请求地址urlc…

Java与Vue前端导出Excel表格文件并解决乱码和下载完后文件打不开情况

JAVA后端 <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.0.0</version> </dependency><!-- https://mv…

K8S(十一)—Service详解

目录 Service发布服务&#xff08;服务类型&#xff09;type: ClusterIP选择自己的 IP 地址例子 type: NodePort选择你自己的端口为 type: NodePort 服务自定义 IP 地址配置例子 type: LoadBalancer混合协议类型的负载均衡器禁用负载均衡器节点端口分配设置负载均衡器实现的类别…

0基础学习VR全景平台篇第129篇:认识单反相机和鱼眼镜头

上课&#xff01;全体起立~ 大家好&#xff0c;欢迎观看蛙色官方系列全景摄影课程&#xff01; 一、相机 单反和微单 这里说的相机是指可更换镜头的单反/微单数码相机。那两者有何差异呢&#xff1f; 1&#xff09;取景结构差异 两者最直观的区别在于&#xff0c;微单相机…

ffmpeg入门之Windows开发之二(视频转码)

添加ffmpeg windows编译安装及入门指南-CSDN博客 的头文件和依赖库如下&#xff1a; main 函数如下&#xff1a; extern "C" { #ifdef __cplusplus #define __STDC_CONSTANT_MACROS #endif } extern "C" { #include <libavutil/timestamp.h> #in…

nodejs+vue+微信小程序+python+PHP国漫推荐系统-计算机毕业设计推荐

使得本系统的设计实现具有可使用的价。做出一个实用性好的国漫推荐系统&#xff0c;使其能满足用户的需求&#xff0c;并可以让用户更方便快捷地国漫推荐。这个系统的设计主要包括系统页面的设计和方便用户互动的后端数据库&#xff0c;在开发后需要良好的数据处理能力、友好的…

Redis发布与订阅

什么是发布与订阅 答: redis发布订阅是一种消息通信通信模式&#xff0c;由发送者(pub)发送消息,订阅者(sub)接收消息。 如下图client2、4、5就是订阅着&#xff0c;订阅了channel1的消息。 当channel1要发送消息时&#xff0c;这几个订阅者都会实时收到消息。 发布订阅的方式…

Koa.js 入门手册:洋葱模型插件机制详解以及常用中间件

前言 Nodejs 提供了 http 能力&#xff0c;我们通过如下代码可以快速创建一个http server服务 const http require(http);http.createServer((req, res) > {res.write(hello\n);res.end();}).listen(3000);使用nodejs提供的原生能力启动一个http server并不麻烦&#xff…

gun-fight枪战对决游戏(自创)

前言 好久都没有更新过啦&#xff01; 游戏介绍 这是一款枪战游戏&#xff0c;你将和人机对战&#xff0c;在火线中对决&#xff01;具体是怎么样的快下载试试吧&#xff01; 下载链接 文件 密码是1111 后言 点个赞吧&#xff01;

阿里云主导《Serverless 计算安全指南》国际标准正式立项!

日前&#xff0c;在韩国召开的国际电信联盟电信标准分局 ITU-T SG17 全会上&#xff0c;由阿里云主导的《Serverless 计算安全指南》国际标准正式立项成功。 图 1 项目信息 在现今数字化时代&#xff0c;Serverless 计算正逐渐成为云计算的一个新的发展方向&#xff0c;其灵活…

智能优化算法应用:基于世界杯算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于世界杯算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于世界杯算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.世界杯算法4.实验参数设定5.算法结果6.参考文…

Python 爬虫之简单的爬虫(三)

爬取动态网页&#xff08;上&#xff09; 文章目录 爬取动态网页&#xff08;上&#xff09;前言一、大致内容二、基本思路三、代码编写1.引入库2.加载网页数据3.获取指定数据 总结 前言 之前的两篇写的是爬取静态网页的内容&#xff0c;比较简单。接下来呢给大家讲一下如何去…

用户行为分析遇到的问题-ubantu16,hadoop3.1.3

用户行为分析传送门 我的版本 ubantu16 hadoop 3.1.3 habse 2.2.2 hive3.1.3 zookeeper3.8.3 sqoop 1.46/1.47 我sqoop把MySQL数据往hbase导数据时候有问题 重磅&#xff1a;大数据课程实验案例&#xff1a;网站用户行为分析&#xff08;免费共享&#xff09; 用户行为分析-小…

OpenCV技术应用(8)— 如何将视频分解

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。本节课就手把手教大家如何将一幅图像转化成热力图&#xff0c;希望大家学习之后能够有所收获~&#xff01;&#x1f308; 目录 &#x1f680;1.技术介绍 &#x1f680;2.实现代码 &#x1f680;1.技术介绍 视频是…

STM32——时钟树与滴答计时器

STM32——时钟树与滴答计时器 使用的开发板为stm32F407VET6的芯片,主要介绍stm32的时钟树与滴答计时器的一些理论和一个自己编写的delay函数。 时钟树的结构图可以在STM32F4xx中文参考手册.pdf中的时钟这块找到。而滴答计时器是内核资源&#xff0c;需要到Cortex M3与M4权威指南…

图片转excel:二种合并方式,有何区别?

图片怎么转为可编辑的excel&#xff0c;并且将转换结果合并为一个表&#xff1f;打开眼精星表格文字识别电脑客户端&#xff0c;我们可以看到顶部有一个功能&#xff0c;名为“表格合并”&#xff0c;而在表格识别模块提交选项里&#xff0c;我们会发现有“合并”选项&#xff…

Win10电脑退出安全模式的两种方法

在Win10电脑中&#xff0c;大家可以点击进入系统安全模式&#xff0c;完成相对应的系统设置。但是&#xff0c;很多用户进入安全模式完成设置后&#xff0c;不知道怎么操作才能成功退出安全模式&#xff1f;接下来小编给大家分享两种简单的方法&#xff0c;帮助大家成功退出Win…

【改进YOLOv8】磁瓦缺陷分类系统:改进LSKNet骨干网络的YOLOv8

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义 近年来&#xff0c;随着智能制造产业的不断发展&#xff0c;基于人工智能与机器视觉的自动化产品缺陷检测技术在各行各业中得到了广泛应用。磁瓦作为永磁电机的主…

JVM-6-HotSpot的算法细节实现

根节点枚举 迄今为止&#xff0c;所有收集器在根节点枚举这一步骤时都是必须暂停用户线程的&#xff0c;因此毫无疑问根节点枚举与之前提及的整理内存碎片一样会面临相似的“Stop The World”的困扰。 即使是号称停顿时间可控&#xff0c;或者&#xff08;几乎&#xff09;不…