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.hqwc.cn/news/284521.html

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

相关文章

mipi屏幕的供电和背光ledk

目录 屏幕供电 背光供电 屏幕供电 mipi的高通供电主要是2.8V和1.8V两个屏幕供电 author daisy.skye的博客_CSDN博客-嵌入式,Qt,Linux领域博主 https://blog.csdn.net/qq_40715266?typeblog 供电配置路径 kernel/msm-3.18/arch/arm/boot/dts/P322/msm8953-mdss-panels.dtsi …

Python内置函数一览表

为了提高程序员的开发效率,Python 提供了很多可以直接拿来用的函数(初学者可以先理解为方法),每个函数都可以帮助程序员实现某些具体的功能。 举个例子,在 Python 2.x 中 print 只是一个关键字,但在 Pytho…

根据星历文件实现卫星的动态运行模拟matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 .................................................................................... % …

【每日OJ—有效的括号(栈)】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 1、有效的括号题目: 1.1方法讲解: 1.2代码实现: 总结 前言 世上有两种耀眼的光芒,一种是正在升起的太阳&#…

Postman/Apifox使用教程

Postman/Apifox使用教程 1. 界面导航说明2.发送第一个请求3. 工具的基础功能3.1 常见类型的接口请求3.1.1 查询参数的接口请求3.1.2 表单类型的接口请求3.1.3 上传文件的表单请求3.1.4 json类型的接口请求 3.2 接口响应数据解析 附录 1. 界面导航说明 2.发送第一个请求 http:/…

matlab面向对象编程入门笔记

文章目录 1. 类和结构2. 定义类3. 属性3.1 private/protected/public属性3.2 constant属性3.3 hidden属性 4. 方法4.1 private/protected/public方法4.2 static方法4.3 外部方法 5. 动态调用6. 继承-超类6.1 handle超类6.2 dynamicprops 和 hgsetget子类 7. 封闭(sealed)类、方…

计算机网络(2):物理层

物理层的基本概念 物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体。 物理层的作用是要尽可能地屏蔽掉差异(硬件设备,传输媒体,通信手段),使物理层上面的数据链…

在centos7上安装docker

1.CentOS安装Docker Docker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10, CentOS 7 满足最低内核的要求,所以我们在CentOS 7安装Docker。 1.1.卸载(可选) 如果之前安装过旧版本的Docker,可…

AngularJS

理解实现代码的逻辑为主要,代码怎么写为次要。 参考资料: 《AngularJS入门与进阶》,江荣波著 前端开发常用框架 React:由Facebook开发,用于构建用户界面的JavaScript库,以组件化和虚拟DOM著称。 Angular&…

【精选】计算机网络教程(第5章运输层)

目录 前言 第5章运输层 1、用户数据报协议(UDP) 2、传输控制协议(TCP) 3、TCP/IP网络中的运输层协议 4、UDP的特点和应用 5、TCP的连接过程 6、慢启动和拥塞避免 7、快速恢复 前言 总结计算机网络教程课程期末必记知识…

Windows11编译x265源码生成Visual Studio工程详细步骤

概述 x265是一款开源符合HEVC标准的编码器,也属于VLC项目之一。 由于x265是开源的,因此它得到了广泛的应用和开发。许多开源项目和商业产品都使用x265进行视频压缩处理。同时,x265也支持多种编程语言和平台,使得开发者可以方便地…

【C语言】鹏哥C语言刷题训练营——第5节内容笔记(含代码全面分析和改进,讲解)

系列文章目录 身躯已然冰封,灵魂仍旧火热 本文由睡觉待开机原创,未经允许不得转载。 本内容在csdn网站首发 欢迎各位点赞—评论—收藏 如果存在不足之处请评论留言,共同进步! 文章目录 系列文章目录前言题目链接(有需要…