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)");

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

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

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

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

相关文章

vscode 文件目录栏缩进

一个好的开发IDE,一定是让人赏心悦目的,这个赏心悦目也一定是包含层级目录的清晰明了!不能像感冒的鼻涕一样一擤一摊子!就像。。。。嗯,算了,断子还是不讲了,怕有些妹子投诉 或发消息批评我。。…

【ppt密码】ppt的密码忘了,怎么破解

PPT文件设置了保护密码,但是密码忘记了,无法打开PPT文件、无法编辑PPT文件了该怎么办?PPT文件的两种保护密码该如何解密? 首先是打开密码 网上有一种解决方法: 1、重新命名PPT文件,将其后缀改为zip格式&…

Shell编程基础 – C语言风格的Bash for循环

Shell编程基础 – C语言风格的Bash for循环 Shell Programming Essentials - C Style For Loop in Bash By JacksonML 循环是编程语言的基本概念之一,同样也是Bash编程的核心。当用户需要一遍又一遍地运行一系列命令直到达到特定条件时,例如&#xff1…

优点和缺点(以及在求职过程中如何处理它们)

你知道你会感到紧张,因为你真的很想要这份工作。当人力资源人员提出这个普遍存在的问题“你的优势和劣势是什么?”时,他们在寻找什么? 有哪些突出的优点和缺点示例?您如何将这些示例个性化,以免听起来像人…

leecode题解Golang版本-3-无重复字符最长子串

题目 无重复字符最长子串 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 题解 func lengthOfLongestSubstring(s string) int {m : make(map[uint8]int)res : 0for l, r : 0, 0; r < len(s); r {m[s[r]]if v, ok : m[s[r]]; !ok || v 1…

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

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

小程序自定义轮播图样式

小程序自定义轮播图样式以下是各案例&#xff0c;仅供大家参考。 效果展示&#xff1a; index.wxml代码&#xff1a; <view><!-- 轮播 --><view><swiper indicator-dots"{{indicatorDots}}"autoplay"{{autoplay}}" interval"{{…

数据可视化的魅力你了解吗?

你真的了解数据可视化吗&#xff1f;它所具备的真正魅力可能远远超出我们想象。数据可视化扩展了我们对数字和信息的简单理解&#xff0c;为我们揭示了一个无限可能的世界。今天我就以可视化行业的多年工作经验出发&#xff0c;和大家简单聊聊数据可视化的魅力。 数据的故事化…

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

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

【VScode】设置语言为中文

1、下载安装好vscode 2、此时可看到页面为英文&#xff0c;为方便使用可切换为中文 3、键盘按下 ctrlshiftP 4、在输入框内输入configure display language 5、选择中文&#xff0c;restart即可&#xff08;首次会有install安装过程&#xff0c;等待安装成功后重启即可&am…

算法设计与分析2023秋-头歌客观题-张超(云南农业大学)

文章目录 第一章客观题练习关于算法描述正确的是&#xff08; &#xff09;算法的要素包括&#xff08; &#xff09;分析算法&#xff0c;最重要的是衡量算法哪两个方面的效率&#xff08; &#xff09;算法的表示方法有&#xff08; &#xff09; 第二章客观题练习关于算法分…

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

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

git push提交出现Everything up-to-date提示问题

以前通过git提交代码到GitHub上的个人main分支时&#xff0c;曾出现过这样一个很低级的错误—— 出现这个错误原因&#xff0c;其实就是没有正确执行指令造成的&#xff0c;也就是没有正常提交数据。 一般按照以下命令提交&#xff0c;基本就没什么问题了—— git add . #添…

5路开关量转继电器 Modbus TCP远程I/O模块 YL95 RJ-45网络接口通信

特点&#xff1a; ● 五路开关量输入&#xff0c;五路继电器输出 ● 支持Modbus TCP 通讯协议 ● 内置网页功能&#xff0c;可以通过网页查询电平状态 ● 可以通过网页设定继电器输出状态 ● DI信号输入&#xff0c;DO输出及电源之间互相隔离 ● 宽电源供电范围&#x…

选择排序、快速排序和插入排序

1. 选择排序 xuanze_sort.c #include<stdio.h> #include<stdlib.h>//选择排序void xuanze_sort(int arr[],int sz){//正着for(int i0;i<sz;i){//外层循环从第一个数据开始依次作为基准数据for(int j i1;j<sz;j){//int j i1 因为第一个数据作为了基准数据&…

本地缓存与多级缓存

一、前言 缓存对于一个高并发场景下的微服务应用来说具有重要的作用&#xff0c;不管是在架构选型还是设计阶段&#xff0c;缓存都是应用扛高并发提升吞吐量的有效手段。缓存对于大多数开发的同学来说并不陌生&#xff0c;一个基本的缓存使用流程如下&#xff1a; 简而言之&am…

NNDL 作业11 LSTM [HBU ]

目录 习题6-4 推导LSTM网络中参数的梯度&#xff0c; 并分析其避免梯度消失的效果 >LSTM前向传播 >反向传播 求梯度 >梯度消失和梯度爆炸怎么来的&#xff1f; >关键点&#xff1a;LSTM如何缓解梯度消失&#xff1f; 习题6-3P 编程实现下图LSTM运行过程 1…

力扣日记12.18-【二叉树篇】合并二叉树

力扣日记&#xff1a;【二叉树篇】合并二叉树 日期&#xff1a;2023.12.18 参考&#xff1a;代码随想录、力扣 617. 合并二叉树 题目描述 难度&#xff1a;简单 给你两棵二叉树&#xff1a; root1 和 root2 。 想象一下&#xff0c;当你将其中一棵覆盖到另一棵之上时&#xf…

【Axure RP9】实现登入效验及实现左侧菜单栏跳转各页面

目录 一 效验简介 1.1 校验好处 1.2 应用场景 二 登入校验 2.1 效果 2.2 实现流程 三 左边菜单栏左侧菜单栏跳转各页面 3.1 效果 3.2 实现图 一 效验简介 1.1 校验好处 提高安全性&#xff1a; 在传统的用户名和密码登录的基础上&#xff0c;引入了另一种或多种验证…

C++中的继承(二)

文章目录 前言多继承虚继承虚继承的底层组合 前言 上一篇文章我们C的正常继承其实已经讲完了&#xff0c;但是后面还有一个大坑。 实际当中继承有单继承和多继承。 单继承就是直接继承一个类。 只有一个直接父类的就叫做单继承。 如果是单继承那就比较简单。 现实世界除了有…