Selenium框架的使用心得(一)

news2024/12/24 2:30:47

最近使用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.coloradmin.cn/o/1320262.html

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

相关文章

EXCEL SUM类函数

参考资料 万能函数SUMPRODUCT超实用的10种经典用法 目录 一. SUM二. SUMIF2.1 统计贾1的销售额2.2 > 900 的销售总额2.3 计算贾1和贾22的销售总额2.4 多区域计算 三. SUMIFS3.1 统计苹果,在第一季度的总数量3.2 统计苹果,在第一季度,>…

智能家居和智能家居控制设备有什么区别?

智能家居和智能家居控制设备在功能和用途伤的区别: 智能家居是一种整体的概念,它涵盖了整个家庭环境的智能化,包括智能家电、智能照明、智能安防等设备的互联互通和协同工作。智能家居的目标是通过中央控制器或智能音箱等设备,实现…

Python内置函数一览表

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

cefsharp120.1.8(cef120.1.8,Chromium120.0.6099.109)版本升级测试,其他版本H264版本

此版本最新版cef120.1.8,Chromium120.0.6099.109 此更新包括一个高优先级安全更新 This update includes a high priority security update. 说明:本版本暂时不支持264,其他H264版本参考119,116,114,110,109等版本 c…

Spring 原理(一)

Spring 原理 它是一个全面的、企业应用开发一站式的解决方案,贯穿表现层、业务层、持久层。但是 Spring仍然可以和其他的框架无缝整合。 Spring 特点 轻量级控制反转面向切面容器框架集合 Spring 核心组件 Spring 常用模块 Spring 主要包 Spring 常用注解 bean …

CUDA C:线程、线程块与线程格

相关阅读 CUDA Chttps://blog.csdn.net/weixin_45791458/category_12530616.html?spm1001.2014.3001.5482 第一百篇博客,写点不一样的。 当核函数在主机端被调用时,它会被转移到设备端执行,此时设备会根据核函数的调用格式产生对应的线程(…

如何应用基础故障编排?

基础故障编排是保障系统稳定性和可用性的关键环节。通过有效应用基础故障编排,组织能够更快速、更智能地应对系统故障,从而提升业务的可靠性和竞争力。本文将介绍如何应用基础故障编排! 1、选择合适的工具: 选择适合组织需求的基础故障编排工…

9. DashBoard

9. DashBoard 文章目录 9. DashBoard9.1 部署Dashboard9.2 使用DashBoard 在kubernetes中完成的所有操作都是通过命令行工具kubectl完成的。 为了提供更丰富的用户体验,kubernetes还开发了一个基于web的用户界面(Dashboard)。 用户可以使用…

Mysql之Specified key was too long; max key length is xx bytes异常

问题原因:mysq索引的字段都太长了 767字节是 MySQL 版本5.6(以及以前版本)中 InnoDB 表的最大索引前缀长度限制,MyISAM 表的长度为1,000字节。在 MySQL 版本5.7及以上版本中,这个限制增加到了3072字节。 如果对 utf8mb4编码的 varchar 字段设…

python+torch线性回归模型机器学习

程序示例精选 pythontorch线性回归模型机器学习 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对《pythontorch线性回归模型机器学习》编写代码,代码整洁,规则&#xf…

【操作系统】实验四 进程调度

实验名称: 实验四 进程调度 实验目的: 1. 加深理解有关进程控制块、进程队列的概念 2. 体会和了解优先级和时间片轮转调度算法的具体实施办法 实验内容: 1. 设计进程控制块 PCB 表结构(与实验一的结构相同)&#xff…

超详细整理,Java接口自动化测试实战-rest-assured

1、关于rest-assured rest-assured 是一个能够简化测试rest服务的Java DSL,像ruby或者python一样的动态语言去测试和验证http服务。 基于java并且兼容了groovy动态语言的特性,使我们像写脚本语言一样去测试http服务。 例如:你的http服务&a…

范仲淹:文能治盛世,武可镇山河

北宋景佑元年(公元1034)年,范仲淹回乡祭拜范氏宗祠。在苏州祖宅住了几天后,范仲淹决定在苏州南园旁边买一块地,在此处盖一处房屋,待老迈时回乡居住。 按照家乡的风俗,在破土动工之前&#xff0c…

Note3---初阶二叉树~~

目录​​​​​​​ 前言🍄 1.树概念及结构☎️ 1.1 树的概念🎄 1.2 树的相关概念🦜 1.2.1 部分概念的加深理解🐾 1.2.2 树与非树🪴 1.3 树的表示🎋 1.4 树在实际中的运用(表示文件系统…

软件试运行整体方案

一、 试运行目的 (一) 系统功能、性能与稳定性考核 (二) 系统在各种环境和工况条件下的工作稳定性和可靠性 (三) 检验系统实际应用效果和应用功能的完善 (四) 健全系统运行管理体…

Hadoop和Spark的区别

Hadoop 表达能力有限。磁盘IO开销大,延迟度高。任务和任务之间的衔接涉及IO开销。前一个任务完成之前其他任务无法完成,难以胜任复杂、多阶段的计算任务。 Spark Spark模型是对Mapreduce模型的改进,可以说没有HDFS、Mapreduce就没有Spark。…

架构简洁之道有感,谈谈软件组件聚合的张力

配图由腾讯混元助手生成 这篇文章介绍了软件架构设计中组件设计思想,围绕“组件间聚合的张力”这个有意思的角度,介绍了概念,并且结合架构设计示例对这个概念进行了进一步阐述。 组件聚合?张力?这标题,有种…

两位技术领导者的故事——英特尔和高通

对于科技行业来说,包括这样一个现实:上学、工作和娱乐实际上是未来生活的一部分。科技行业也面临着变革,行业内发生了几起重大收购和管理层变动。其中两个最具影响力的变化是英特尔和高通的换岗。具有讽刺意味的是,这两家公司在过…

UGUI 鼠标悬浮UI出现弹框,鼠标在图片边缘出现闪烁

1、背景:鼠标悬浮在UI上出现提示框 public class SpecialParam_list : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler {public void OnPointerEnter(PointerEventData eventData){TipBox.Instance.ShowBox(Input.mousePosition, value);}public void …

改进灰狼算法求解:考虑需求响应的风-光柴-储容量优化配置

目录 文章摘要: 亮点: 研究背景: 考虑需求相应的容量配置: 风、光、柴、储微电网模型: 储能配置模型: 改进的灰狼算法: 基于余弦规律变化的收敛因子 引入动态权重策略 运行效果&#…