RobotFramework框架+Selenium实现UI自动化测试(十六)

news2024/9/22 3:47:57

学习目录

1 UI自动化测试

2安装RF框架所需的
robotframework-seleniumlibrary包

1) robotframework-seleniumLibrary版本说明

2) robotframework-selenium2Library版本说明

3 selenium介绍

3.1 配置操作系统环境支持使用selenium打开浏览器

3.2 selenium的常用元素定位方法

3.3 selenium获取元素后的操作方法

3.4 打开百度输入文本后点击搜索

3.5 介绍下元素的查找方法

4在RF中使用seleniumlibrary库编写用例

4.1打开ride导入seleniumlibrary库

4.2在SUITE中创建用例

4.3 常用关键字介绍

1 UI自动化测试

UI自动化测试(User Interface Automation Testing)是一种通过编写脚本或使用自动化测试工具,对界面(UI)进行自动化测试的方法。原理主要是模拟用户打开客户端或网页的UI界面,自动化执行用户界面上的操作,如点击按钮、输入文本、选择但下拉框/单选,多选项等,并检查测试对象的响应行为是否符合预期。

比如一些常用的测试框架或者工具(robotframework(以下简称RF),testng,pytest,selenium,appnium,playwright等)都支持UI界面的自动化测试,而这节内容主要介绍下robotframework框架+selenium工具在web端的自动化实践。

2安装RF框架所需的robotframework-seleniumlibrary包

关于RF框架中的selenium包版本说明如下:有两个robotframework-seleniumLibrary和robotframework-selenium2Library

1)robotframework-seleniumLibrary版本说明

robotframework-seleniumLibrary包最新的版本6.5.0(发布时间2024年6月15日),支持Python 3.8到3.11,安装该包时会默认安装依赖的selenium库4.0的版本.

如果自己使用的pyhon版本低于3.8可以参考历史包找到适配的版本(官网地址https://pypi.org/project/robotframework-seleniumlibrary/#history)

每个版本都会有适配的python版本说明:

通过pip命令安装以下包

pip install robotframework-seleniumlibrary安装最新版本或者指定版本

pip install robotframework-seleniumlibrary==5.1.3

2)robotframework-selenium2Library版本说明

robotframework-selenium2Library包最新的版本3.0.0(发布时间2017年12月5日),已经停止更新了。而且从3.0版本开始,Selenium2Library更名为SeleniumLibrary,支持Python 2.7以及Python 3.3及更新版本。

通过pip命令安装包:

pip install robotframework-selenium2library安装最新版本或者指定版本

pip install robotframework-seleniumlibrary==1.8.0

PS: python版本 selenium版本 robotframework-seleniumlibrary版本三个要适配,否则会报错

3)本次使用的RF框架的各个包的适配版本

robotframework-ride 1.7.4

robotframework 3.2.1

robotframework-selenium2library 3.0.0

robotframework-seleniumlibrary 3.3.1

selenium 3.141.0

python 3.7.7

3 selenium介绍

Selenium是一个用于Web应用程序的自动化测试工具,支持多平台(Windows、Linux和Mac)、多浏览器(IE,Mozilla Firefox、Safari、Google Chrome、Opera、Edge)、多语言(Java、Python、C#、JavaScript、Ruby),能够让测试脚本像真实用户一样在浏览器中操作。

核心组件:

Selenium IDE:Selenium Suite下的开源Web自动化测试工具,是Firefox的一个插件,具有记录和回放功能,无需编程即可创建测试用例。

Selenium WebDriver:Selenium 2.0及以后版本的核心,通过原生浏览器支持或浏览器扩展直接控制浏览器,取代了Selenium RC中的JavaScript注入技术。

Selenium Grid:一种自动化测试辅助工具,能够加快Web应用的功能测试,支持并行执行多个测试事例。

3.1 配置操作系统环境支持使用selenium打开浏览器

以下以Mac操作系统举例:

配置MAC系统safari浏览器支持selenium打开

safari浏览器从10及以上版本通常内置了对WebDriver的支持

不需要下载下载浏览器的驱动,但是需要配置浏览器支持使用selenium打开。如果不配置执行程序会报以下错误:

配置步骤:

打开Safari浏览器。

点击菜单栏上的“Safari浏览器”,然后选择“偏好设置”(Preferences)。

在偏好设置窗口中,点击“高级”(Advanced)标签页。

勾选“在菜单栏中显示‘开发’菜单”(Show Develop menu in menu bar)。

关闭偏好设置窗口,然后点击菜单栏上的“开发”(Develop)菜单。

勾选“允许远程自动化”(Allow Remote Automation)。

配置后我们使用selenium打开safari浏览器

首先导入selenium.webdriver,然后我们打开浏览器,等待一段时间后使用quit函数退出浏览器。

from selenium import webdriver
import time
# 创建Safari浏览器的WebDriver实例
driver = webdriver.Safari()
# 打开一个网页
driver.get("https://www.baidu.com")
#打开后等待60s退出
time.sleep(60)
# 关闭浏览器
driver.quit()

python程序执行后,结果如下:会自动打开浏览器输入百度网址,完成访问。

配置MAC系统google浏览器支持selenium打开

google浏览器不像safari浏览器,使用前我们先要下载驱动程序(下载地址https://chromedriver.storage.googleapis.com/index.html),驱动程序的版本要跟浏览器的版本一致,比如浏览器是127版本,驱动程序也要下载127的版本。

下载后解压,并将程序chromedriver放到/usr/local/bin目录下,并执行命令赋予权限:sudo xattr -d com.apple.quarantine chromedriver。否则无权限通过selenium打开后会报如下错误:

配置后我们使用selenium打开google浏览器

首先导入selenium.webdriver,然后我们打开浏览器,等待一段时间后使用quit函数退出浏览器。

from selenium import webdriver
from time import sleep
# 创建谷歌浏览器的WebDriver实例
driver = webdriver.Chrome()
# 打开一个网页
driver.get("https://www.baidu.com")
# 等待几秒钟以便观察浏览器行为
sleep(60)
# 关闭浏览器
driver.quit()

PS: windows系统下谷歌浏览器的驱动下载后,将chromedriver.exe放到python程序的安装目录,比如“D:\Python37”

3.2 selenium的常用元素定位方法

通常使用find_element方法定位页面元素,函数源代码如下:适用selenium4.23.1版本

函数中的参数by表示定位元素的方式,在库
selenium.webdriver.common.by.By中定义如下:

函数中的参数value表示by方式对应的值。

也就是说find_element函数可以通过以下8种方式进行元素定位:

["id", "xpath", "link text", "partial link text", "name", "tag name", "class name", "css selector"]

3.3 selenium获取元素后的操作方法

当我们获取到元素后,我们可以在对应的元素位置,输入文本。点击按钮等

主要方法有:

1. 文本输入与清除

send_keys():在元素上模拟按键输入,通常用于向输入框中填充文本。

clear():清除元素的输入内容,如清空一个文本输入框。

2. 点击操作

click():单击元素,可以是按钮、链接等可点击的元素。

3. 表单提交

submit():提交表单,也可以使用click()方法,但submit()方法专门用于表单的提交。

4. 元素属性与状态获取

get_attribute(element_name):获取元素的属性值,如id、name、type等。

is_selected():判断元素是否被选中,常用于单选框、复选框等。

is_displayed():判断元素是否可见,返回一个布尔值。

is_enabled():判断元素是否可启用,例如,某些按钮在特定条件下可能不可点击。

5. 鼠标与键盘操作

ActionChains 类:Selenium的ActionsChains类提供了更复杂的鼠标和键盘操作,如鼠标悬停(move_to_element)、双击(double_click)、右击(context_click)等。

6. 获取元素尺寸与位置

size:返回元素的尺寸,通常包含宽度和高度。

location:返回元素在页面上的位置,通常是元素的左上角坐标。

7. 获取元素文本

text:获取元素的文本内容,如获取一个段落或链接的文本。

8 页面操作

refresh():刷新当前页面。

back() 和 forward():模拟浏览器的后退和前进操作。

maximize_window() 和 minimize_window():最大化或最小化浏览器窗口。

3.4 打开百度输入文本后点击搜索

以打开百度网站,输入文本并点击搜索为例介绍下如何查找界面元素

我们以获取元素的id举例,先上代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
# 创建Safari浏览器的WebDriver实例
driver = webdriver.Safari()
# 打开一个网页
driver.get("https://www.baidu.com")
#最大化网页
driver.maximize_window()
#查找id=kw的元素位置,对应于搜索输入框,找到后我们输入字符python
driver.find_element(By.ID,'kw').send_keys('python')
##查找id=su的元素位置,对应于‘百度一下’的按钮,找到后我们点击按钮
driver.find_element(By.ID,'su').click()
# 等待几秒
sleep(60)
# 关闭浏览器
driver.quit()

代码执行后,网页自动打开并搜索如下:

3.5 介绍下元素的查找方法

打开网页后,通过查找元素,找到输入框和百度一下对应元素信息。

输入框的元素信息:<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">

Xpath为://*[@id="kw"]

百度一下按钮的元素信息:

<input type="submit" id="su" value="百度一下" class="bg s_btn">

对应Xpath为://*[@id="su"]

通过以上元素信息我们就拿到了输入框和百度一下按钮的id信息,然后获取后输入文本和点击按钮,就完成了一次查找和点击的动作。

当然我们除了通过id获取元素,也可以通过name,xpath等方式操作,大家不妨多试下,此处不再赘述。

4在RF中使用seleniumlibrary库编写用例

4.1打开ride导入seleniumlibrary库

打开ride客户端,我们先创建测试套件,然后导入SeleniumLibrary库,按F5键查看一些关键字信息。

4.2在SUITE中创建用例

在suite套件中创建一条用例,打开谷歌浏览器,输入文本后点击搜索,返回上一个页面,再次输入后搜索,最后在teardown中关闭浏览器。

以下元素定位的方式采用的是id,大家不妨试下name,class,xpath等方式。

*** Settings ***
Library SeleniumLibrary

*** Variables ***
${URL} https://www.baidu.com
${BROWSER} Chrome

*** Test Cases ***
打开百度输入文本后点击查询
	Open Browser ${URL} ${BROWSER}
	Input Text id=kw python
	click button id=su
	${text1} get_value id=kw
	#校验输入的内容是否成功
	should be equal ${text1} python
	sleep 2
	go_back
	Input Text id=kw selenium
	click button id=su
	${text1} get_value id=kw
	#校验输入的内容是否成功
	should be equal ${text1} selenium
	sleep 2
  [Teardown] close_browser

4.3 常用关键字介绍

浏览器操作相关的关键字

关键字位于文件
SeleniumLibrary/keywords/browsermanagement.py

  • open_browser:打开某个浏览器访问传入的URL,浏览器可以是firefox,chrome,edge,safari等
  • close_all_browsers:关闭打开的所有浏览器
  • close_browser:关闭当前使用的浏览器
  • go_back:返回上一个页面
  • go_to:跳转到其他url
  • reload_page:刷新页面
  • log_location: 返回当前页面的URL
  • location_should_be:返回当前页面的URl 与传入的对比,不相等会报错。

表单相关的关键字

关键字位于文件
SeleniumLibrary/keywords/formelement.py

  • submit_form:提交表单
  • select_checkbox:选择某个复选框
  • unselect_checkbox:取消选择某个复选框
  • checkbox_should_be_selected:检查复选框是否被选中
  • checkbox_should_not_be_selected:检查复选框没有被选中
  • page_should_contain_checkbox:检查页面包含某个复选框
  • page_should_not_contain_checkbox:检查页面不包含某个复选框
  • page_should_contain_radio_button:检查页面包含某个单选框
  • page_should_not_contain_radio_button:检查页面不包含某个单选框
  • select_radio_button:选中某个单选框
  • radio_button_should_be_set_to:检查某个单选框设置为某个名称
  • radio_button_should_not_be_selected:检查某个单选框没有被选中
  • choose_file:选择一个文件
  • input_password:输入密码
  • input_text:输入文本
  • page_should_contain_button:检查页面包含某个按钮
  • page_should_not_contain_button:检查页面不包含某个按钮

元素相关的关键字

关键字位于文件
SeleniumLibrary/keywords/element.py

  • get_element_attribute:获取元素的属性,比如元素的id,name,value等
  • get_value:获取元素的value值
  • get_text:获取元素的text
  • click_button:点击某个按钮
  • click_image:点击某个图片
  • click_link:点击某个链接
  • click_element:点击某个元素,可以是按钮/图片等
  • double_click_element:双击某个元素
  • mouse_down:鼠标往下移动
  • mouse_out:鼠标移出
  • mouse_over:鼠标悬停
  • mouse_up:鼠标往上移动

窗口相关的关键字

关键字位于文件
SeleniumLibrary/keywords/window.py

  • maximize_browser_window:最大化窗口
  • set_window_size:设置窗口的大小
  • close_window:关闭浏览器窗口

共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”

-----指水滴不断地滴,可以滴穿石头;

-----比喻坚持不懈,集细微的力量也能成就难能的功劳。

----感谢读者的阅读和学习,点个赞和关注吧,谢谢大家。

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

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

相关文章

「OC」简单网络请求的实现

「OC」简单网络请求的实现 文章目录 「OC」简单网络请求的实现写在前面URL和API网络请求的流程网络申请数据解析参考文章 写在前面 在暑假最后一个项目天气预报之中&#xff0c;使用了网络请求&#xff0c;虽然说还是不太理解网络请求之中的相关内容&#xff0c;以及在写天气预…

傻瓜式一步到位Mysql 8.0 密码修改

5.7之前修改密码语句 update user set authentication_string password(“root”) where user “root”; mysql 5.7.9以后废弃了password字段和password()函数&#xff1b;并在user表加了authentication_string:字段表示用户密码 #进入到mysql 安装目录下 #停止 mysql 服务 …

低碳环保测试知识问答活动

全国生态日&#xff0c;倒计时1天。为了组织这场关于“低碳环保测试知识问答”主题的线上知识竞赛&#xff0c;我们历经从活动方案策划到落地答题小程序上线。 一、活动背景 通过举办此次知识竞赛&#xff0c;旨在提高公众对低碳环保的认识和参与度&#xff0c;推广低碳生活方…

网络协议七 应用层 DNS协议 和 DHCP协议 这两个都了解就好

应用层常见的协议 1. DNS 协议 了解 将baidu.com 解析成具体IP的协议 实际上可以理解为&#xff1a;客户端 通过 DNS 协议 和 DNS 服务器进行交互&#xff0c;将域名转换成IP 2. DHCP 协议 了解 从DHCP 服务器自动获取IP地址

P1305 新二叉树

题目&#xff1a; 洛谷传送门&#xff1a;P1305 新二叉树 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) AC代码&#xff1a; #include<bits/stdc.h> using namespace std; int n,ans; char root; struct node{char nod,r,l; }a[100000]; void dfs(char idx){cout<…

Erupt 项目搭建

创建Spring Boot项目 Maven依赖 Spring Boot版本为 2.7.10&#xff0c;erupt版本为 1.12.14 erupt版本要与Spring Boot版本适配&#xff0c;3.x.x版本Spring Boot暂不适用说是 <properties><erupt.version>1.12.14</erupt.version></properties> <…

全场景——(三)USB开发基础(1)

文章目录 一、USB 系统硬件框架和软件框架1.1 实验现象1.2 硬件框架1.3 软件框架 二、USB 电气信号2.1 USB 设备状态切换图2.2 硬件线路2.3 电子信号2.4 低速/全速信号电平2.5 高速信号电平2.6 设备连接与断开2.6.1 连接2.6.2 断开 2.7 复位2.8 设备速率识别2.8.1 低速/全速2.8…

【STM32】入门教程(完整版汇总非常详细)

本教程参考b站江协科技STM32入门教程&#xff0c;视频链接&#xff1a; 哔哩哔哩江协科技STM32入门教程https://www.bilibili.com/video/BV1th411z7sn/?spm_id_from333.337.search-card.all.click “唯一能持久的竞争优势是胜过竞争对手的学习能力。”——盖亚斯 希望对您有帮…

栈的定义及基本操作

栈的定义和特点 栈是一个特殊的线性表&#xff0c;是限定在一端进行插入和删除操作的线性表&#xff1b; 插入到栈顶称作入栈&#xff08;PUSH) 从栈顶删除最后一个元素称作出栈 &#xff08;POP&#xff09; 图1 栈的表示 假设三个元素a,b,c入栈顺序为a&#xf…

【洛谷/水滴题解】[NOIP2005 普及组] 采药

1.难度&#xff1a;普及- 2.类型&#xff1a;dp&#xff0c;01背包 3.描述&#xff0c;输入输出格式&#xff0c;样例&#xff1a; 4.AC代码&#xff1a; #include<bits/stdc.h> using namespace std; int t,m; int dp[1005]; int main() {ios::sync_with_stdio(false…

MySQL第8讲--DCL(数据控制语言)的基本操作

文章目录 前言DCL(数据控制语言)用户管理查询用户创建用户修改用户密码删除用户 权限控制查询权限授予权限撤销权限 前言 在第六讲MySQL第6讲–DQL(数据查询语言)的基本操作之基本和条件查询和第七讲MySQL第7讲–DQL(数据查询语言)的基本操作中我们讲述了DQL中的&#xff0c;基…

高性能云桌面在工业设计中的应用,百度智能云云桌面给出答案

在之前的文章中我们讲到&#xff0c;边缘云桌面可以通过在距离用户较近的边缘节点上直接处理数据和应用&#xff0c;减少了数据传输时间&#xff0c;降低延迟&#xff0c;提高数据处理的速度和安全性。用户可以通过任何设备&#xff0c;随时随地访问自己的桌面环境&#xff0c;…

每日OJ_牛客HJ59 找出字符串中第一个只出现一次的字符

目录 牛客HJ59 找出字符串中第一个只出现一次的字符 解析代码 牛客HJ59 找出字符串中第一个只出现一次的字符 找出字符串中第一个只出现一次的字符_牛客题霸_牛客网 解析代码 可以用一个数组的每一个位置表示对应的位置。对应的字符位置存放字符出现的次数。统计完之后&…

【云备份】学习bundle库

文章目录 1.认识bundle⽂件压缩库bundle库实现⽂件压缩bundle实现文件解压缩 1.认识bundle⽂件压缩库 BundleBundle 是一个嵌入式压缩库&#xff0c;支持23种压缩算法和2种存档格式。使用的时候只需要加入两个文件 bundle.h 和 bundle.cpp 即可。 showcase #include <cass…

安全入门day.02

一、环境部署 1、windows版本 2、Linux版本 二、WEB应用组成角色名词 1、开发语言 2、程序源码 3、中间件容器 4、数据库 5、服务器操作系统 6、第三方软件 三、WEB应用安全漏洞分类 1、SQL注入 2、文件安全 3、RCE执行 4、XSS跨站 5、CSRF/SSRF/CRLF 6、反序列…

基于RK3568 Android11 移除长按电源按键弹窗的对话框中的 [关机] 和 [紧急呼救] 选项(详细分析)

一般来说&#xff0c;与Android按键窗口事件相关的基本是与frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java 这个文件有关。   因此先打开与输入相关的日志&#xff0c;如下&#xff1a;   然后重新编译烧录后查看打印的日志可以看…

Matcha-Tts:一种基于条件流匹配的快速Tts架构笔记

MATCHA-TTS: A FAST TTS ARCHITECTURE WITH CONDITIONAL FLOW MATCHING笔记 提出问题&#xff1a; 1、合成速度慢 提出方法&#xff1a; 首先&#xff0c;提出了一种改进的编码器-解码器TTS架构&#xff0c;在解码器中使用1D CNN和Transformer的组合。这样减少了内存消耗&am…

使用tailwindcss轻松实现移动端rem适配

本示例节选自小卷全栈开发实战系列的《Vue3实战》。演示如何用tailwindcss所支持的rem体系轻松实现一个仿b站移动端头部导航栏rem适配。 友情声明 学习分享不易&#xff0c;如果小伙伴觉得有帮助&#xff0c;点赞支持下。满30赞&#xff0c;将随文附赠录屏讲解&#xff0c;感谢…

linux shell 脚本入门到实战

目录 一、shell入门简介1.1什么是shell1.2shell编程注意事项1.3第一个shell脚本helloworld 二、shell环境变量讲解2.1shell变量详解2.2shell系统变量介绍2.3shell环境变量介绍2.4shell用户环境变量介绍2.4.1自定义shell环境变量 三、shell编程流程控制语句3.1if条件语句介绍3.1…

TikTok出现“无网络连接”,具体原因与解决方法

“No network connection”&#xff01;当你信心满满下载并准备开始运营TikTok时&#xff0c;屏幕上如果提示“无互联网连接”非常难办。有很多因素可能会导致此问题&#xff0c;包括网络连接无效、应用程序故障等。接下来将为你盘点主要的原因与解决方法。 一、无网络连接的原…