RobotFramework框架+Selenium实现UI自动化测试(十六)
wptr33 2024-12-03 03:58 12 浏览
学习目录
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
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
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:关闭浏览器窗口
共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”
-----指水滴不断地滴,可以滴穿石头;
-----比喻坚持不懈,集细微的力量也能成就难能的功劳。
----感谢读者的阅读和学习,点个赞和关注吧,谢谢大家。
相关推荐
- 为什么劝你不要买Switch OLED?(现在买switch oled划算吗)
-
那么在聊我们自己的观点前,还是先来看看这款任天堂SwitchOLED款式究竟带来了哪些变化吧。SwitchOLED已经把它最大的特点之一写到了名字里——OLED。这款产品改动最大的地方,就是在维...
- 新游戏、怀旧机!没有Switch新机的任天堂还能俘虏玩家们的心吗?丨C位
-
6月16日凌晨,日本电子游戏巨头任天堂在E3游戏展会上举行了发布会。翘首以盼的SwitchPro并未亮相,截止发稿,任天堂股价跌2.44%。但玩家们最为期待的《塞尔达:荒野之息2》将于2022年推出...
- 腾讯引进Nintendo Switch (OLED版)开启预售 多重满足您的娱乐需求
-
1月4日,腾讯引进NintendoSwitch(OLED版)开启预售,并将于1月11日正式发售。NintendoSwitch(OLED版)是NintendoSwitch的全新款式,配置色彩艳丽的...
- 股东大会上任天堂考虑移植更多WiiU和GC游戏到Switch
-
任天堂股东大会上有任天堂的忠实小股东玩家提议想在Switch玩到WiiU以及GC的经典游戏,对于这个问题,官方给了正面的回应。官方表示目前皮克敏等部分游戏已经可以在switch上玩了,今后会认真考虑玩...
- 《野狗子》M站均分低至60分!IGN仅给5分、VGC感觉像是PS3游戏
-
外山圭一郎工作室首部作品《野狗子》全球媒体口碑已解禁,总体评价一般,目前M站均分已降低至60分,21条评价,好评5条,中评14条,差评2条。IGN为其打出5分评价。《野狗子》的特色在于一些有趣的附身交...
- 《EA SPORTS FC 25》加入任天堂游戏试玩会,Switch版可免费体验
-
近日,EASPORTS宣布其最新力作《EASPORTSFC25》的Switch版本已正式加入任天堂游戏试玩会。即日起至3月2日,所有NintendoSwitchOnline订阅用户均可限时...
- Double Kill!马里奥乐园+Switch能解任天堂焦虑吗?丨C位
-
近日,“超级任天堂世界”主题乐园在大阪环球影城开园,“超级马里奥之父”宫本茂现身揭幕仪式。任天堂近来喜事连连,2020年财年前九个月实现营收838亿元,贡献最大的Switch销量远超索尼PS5与微...
- 迷你主机、Switch好搭子:16寸4K超亮QLED CFORCE便携屏值得入手吗
-
一、迷你主机、Switch好搭子...
- 怎样查看Switch的“主机序列号信息”
-
小时候看到游戏机就走不动,现在玩游戏越来越方便了,比如Switch.今天讲讲怎样查看Switch的“主机序列号信息”。第一步:点击【设置】...
- Switch版《EA SPORTS FC 25》容量相比前作缩水
-
备受期待的Switch版足球游戏《EASPORTSFC25》即将发布,根据任天堂官方网站的游戏信息显示,与前作《EASPORTSFC24》相比,游戏容量有所下降。在任天堂官方网站可以查到,...
- switch双系统升级注意点(switch双系统升级注意点是什么)
-
升级系统有风险,建议只有实在想玩的游戏玩不了的时候再升级。1、针对双系统进行,单系统不适用。2、国行系统同pj系统的升级是分开的,互不干涉。国行系统进入后直接升级即可。3、升级之前,建议先做好各类备份...
- 《鬼泣4:特别版》游戏评测:全家老小齐上阵
-
游戏名称:鬼泣4:特别版英文名称:DevilMayCry?4SpecialEdition游戏类型:动作游戏ACT制作公司:CAPCOMCo.,Ltd.发行公司:CAPCOMCo.,L...
- 最好不要在超过35°C的环境温度里玩你的掌机
-
随着进入“初伏”,天气越发酷热,今年全球高温尤为严重。Valve对此发布了一个安全警告,告诉玩家SteamDeck可以在哪些温度下安全运行。Valve指出,SteamDeck的最佳工作环...
- 任天堂回应股东玩家 考虑Switch回溯游玩WiiU以及GC游戏
-
今日有任天堂的忠实小股东玩家提议想在Switch玩到WiiU以及GC的经典游戏,官方回应称正在考虑中,敬请期待。·当然,Switch回溯游玩WiiU以及GC游戏的方式有任天堂的在线服务直接游玩官方优...
- Switch 2神秘C键用途曝光!或能连接初代NS手柄
-
直到近日,游戏圈内的风云人物、知名爆料人extas1s站了出来,带来一则令人颇感意外的消息。extas1s爆料称,玩家有望借助这个神秘的C按钮,实现初代Switch与Switch2...
- 一周热门
-
-
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
-
因果推断Matching方式实现代码 因果推断模型
-
git pull命令使用实例 git pull--rebase
-
git pull 和git fetch 命令分别有什么作用?二者有什么区别?
-
面试官:git pull是哪两个指令的组合?
-
git 执行pull错误如何撤销 git pull fail
-
git fetch 和git pull 的异同 git中fetch和pull的区别
-
git pull 之后本地代码被覆盖 解决方案
-
还可以这样玩?Git基本原理及各种骚操作,涨知识了
-
git命令之pull git.pull
-
- 最近发表
-
- 为什么劝你不要买Switch OLED?(现在买switch oled划算吗)
- 新游戏、怀旧机!没有Switch新机的任天堂还能俘虏玩家们的心吗?丨C位
- 腾讯引进Nintendo Switch (OLED版)开启预售 多重满足您的娱乐需求
- 股东大会上任天堂考虑移植更多WiiU和GC游戏到Switch
- 《野狗子》M站均分低至60分!IGN仅给5分、VGC感觉像是PS3游戏
- 《EA SPORTS FC 25》加入任天堂游戏试玩会,Switch版可免费体验
- Double Kill!马里奥乐园+Switch能解任天堂焦虑吗?丨C位
- 迷你主机、Switch好搭子:16寸4K超亮QLED CFORCE便携屏值得入手吗
- 怎样查看Switch的“主机序列号信息”
- Switch版《EA SPORTS FC 25》容量相比前作缩水
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mysql max (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)