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


    学习目录

    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函数退出浏览器。

    1. from selenium import webdriver
    2. import time
    3. # 创建Safari浏览器的WebDriver实例
    4. driver = webdriver.Safari()
    5. # 打开一个网页
    6. driver.get("https://www.baidu.com")
    7. #打开后等待60s退出
    8. time.sleep(60)
    9. # 关闭浏览器
    10. 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函数退出浏览器。

    1. from selenium import webdriver
    2. from time import sleep
    3. # 创建谷歌浏览器的WebDriver实例
    4. driver = webdriver.Chrome()
    5. # 打开一个网页
    6. driver.get("https://www.baidu.com")
    7. # 等待几秒钟以便观察浏览器行为
    8. sleep(60)
    9. # 关闭浏览器
    10. 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举例,先上代码:

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

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

    3.5 介绍下元素的查找方法

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

    输入框的元素信息:

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

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

    对应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等方式。

    1. *** Settings ***
    2. Library SeleniumLibrary
    3. *** Variables ***
    4. ${URL} https://www.baidu.com
    5. ${BROWSER} Chrome
    6. *** Test Cases ***
    7. 打开百度输入文本后点击查询
    8. Open Browser ${URL} ${BROWSER}
    9. Input Text id=kw python
    10. click button id=su
    11. ${text1} get_value id=kw
    12. #校验输入的内容是否成功
    13. should be equal ${text1} python
    14. sleep 2
    15. go_back
    16. Input Text id=kw selenium
    17. click button id=su
    18. ${text1} get_value id=kw
    19. #校验输入的内容是否成功
    20. should be equal ${text1} selenium
    21. sleep 2
    22. [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:关闭浏览器窗口

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

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

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

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

  • 相关阅读:
    DeepLab-LargeFOV--学习笔记
    开发工程师必备————【Day12】MySQL数据库基础操作
    20220917使用迅雷和python3脚本下载ts格式的视频切片文件的速度对比
    LeetCode题解—260.只出现一次的数字Ⅲ
    Java 多线程:锁
    数据分析师如何用SQL解决业务问题?
    React学习笔记二
    HTML+CSS+JS网页设计期末课程大作业 web前端开发技术 web课程设计 网页规划与设计
    无线传感器网络:排队论(Queueing Theory)模型
    Android简易音乐重构MVVM Java版-新增歌曲播放界面+状态栏黑科技(十七)
  • 原文地址:https://blog.csdn.net/kymppcds/article/details/141107941