五、Web自动化测试

news2024/11/14 22:39:35

Web自动化测试

  • 5.1 Selenium Web 自动化
    • 5.1.1 Selenium 和 Robot Framework SeleniumLibrary 库介绍
      • 安装 robotframework-seleniumlibrary
      • 导入 SeleniumLibrary
    • 5.1.2 Open Browser 和 Close Browser
    • 5.1.3 Input Text
    • 5.1.4 Click Button
    • 5.1.5 Click Element
    • 5.1.6 Click Link
    • 5.1.7 Add Cookie、Get Cookies 和 Delete Cookie
    • 5.1.8 Get All Links
    • 5.1.9 Choose File
    • 5.1.10 Get Text
    • 5.1.11 Get Title
    • 5.1.12 Get Value
    • 5.1.13 Get Webelements 和 Get Webelement
    • 5.1.14 Get Window Titles
    • 5.1.15 Go Back 和 Go To
    • 5.1.16 Get List Items
    • 5.1.17 Get Selected List Value
    • 5.1.18 Select From List
    • 5.1.19 Selenium2Library 库其他的自动化测试关键字介绍
  • 5.2 SikuliLibrary 库的使用
    • 5.2.1 Sikuli 简介
      • 安装 robotframework-SikuliLibrary
      • 导入 SikuliLibrary
      • 示例
    • 5.2.3 SikuliLibrary 的工作原理
    • 5.2.4 SikuliLibrary 常用关键字介绍

5.1 Selenium Web 自动化

Selenium 出来已经有很多年了,从最初的 Selenium1 到后来的 Selenium2,也变得越来越成熟,而且已经被很多公司广泛使用

Selenium 在发展的过程中分了很多模块,这里我们主要介绍 WebDriver

WebDriver 已经被很多浏览器所兼容,WebDriver 在自动化脚本和浏览器之间充当的角色和之前介绍的 Appium 很像

由于现在很多的浏览器都已经主动支持和兼容了 WebDriver,所以 WebDriver 在启动后会确认浏览器的 native component 是否存在可用而且版本匹配,接着在目标浏览器里启动使用 Selenium 自己设计定义的协议(WebDriver WireProtocol)

WebDriver Wire 协议是通用的,也就是说不管是 FirefoxDriver 还是 ChromeDriver 等,启动之后都会在某一个端口启动基于这套协议的 Web 服务

WebDriver Wire 协议是一套基于 RESTful 的 Web 服务,在调用 WebDriver 的时候,实际上是给在浏览器上启动的 RESTful 服务监听端口发送 HTTP请 求,以 WebDriver Wire 协议规定的 JSON格 式的字符串来告诉 Selenium 希望浏览器执行什么样的操作

5.1.1 Selenium 和 Robot Framework SeleniumLibrary 库介绍

从 Selenium 官网可以下载到各种浏览器运行需要的 Driver

从 http://www.seleniumhq.org/docs/ 地址可以查询到关于 Selenium 的文档和介绍等信息

SeleniumLibrary 用户手册

安装 robotframework-seleniumlibrary

pip install robotframework-seleniumlibrary

请添加图片描述

导入 SeleniumLibrary

请添加图片描述

5.1.2 Open Browser 和 Close Browser

在 SeleniumLibrary 库中,Open Browser 关键字用来打开一个指定的浏览器
请添加图片描述
Close Browser 关键字用来关闭一个已经打开的当前浏览器
请添加图片描述

5.1.3 Input Text

Input Text 关键字用于模拟向一个输入框中输入文字内容

该关键字接收两个参数[ locator| text ]

  • locator 参数指的是定位界面元素的方式
  • text 参数指的是需要输入的内容

请添加图片描述

5.1.4 Click Button

Click Button 关键字用于模拟单击页面中的按钮

  • 接收一个参数[ locator ]

请添加图片描述

5.1.5 Click Element

Click Element 关键字用于模拟单击一个通过 locator 定位到的具体元素,可以是通过 id 或者 name、xpath 等

  • 该关键字接收一个参数[ locator ]

请添加图片描述

5.1.6 Click Link

Click Link 关键字用于模拟单击一个链接

  • 该关键字接收一个参数[ locator ]

请添加图片描述

5.1.7 Add Cookie、Get Cookies 和 Delete Cookie

Add Cookie 关键字用于模拟向本地浏览器中添加一个 Cookie 缓存,Cookie 也是我们在做 Web 自动化测试时经常需要用到的一个概念

  • 该关键字接收[ name |value | path=None | domain=None | secure=None | expiry=None ]这几个参数
    请添加图片描述

请添加图片描述

Get Cookies 关键字用于获取浏览器中缓存的所有 Cookie

  • 这个关键字后面不需要加任何的参数

Delete Cookie 关键字用于删除浏览器中缓存的 Cookie

  • 该关键字接收一个参数[name],用于标志需要删除的 Cookie的名称

请添加图片描述

5.1.8 Get All Links

Get All Links 关键字用来获取所有页面上所有的 href 链接的元素对应的 id,链接对应的元素中没有 id 时,就以一个空字符串代替
请添加图片描述

5.1.9 Choose File

做自动化测试时,我们经常遇到的就是上传文件了,这里我们可以使用 Choose File 关键字完成该操作

  • 接收[ locator | file_path ]两个关键字
    请添加图片描述

请添加图片描述

5.1.10 Get Text

Get Text 关键字用来获取文本内容

  • 该关键字接收[ locator ]这一个关键字,locator可以通过 id、name、xpath 等来定位
    请添加图片描述

5.1.11 Get Title

Get Title 关键字用来获取浏览器网页的 title

  • 该关键字后面不需要接收任何参数

请添加图片描述

5.1.12 Get Value

Get Value 关键字用于获取某个元素标签对应的 value 属性,

  • 该关键字接收[locator ]这一个参数,locator 可以通过 id、name、xpath 等进行定位
    请添加图片描述

5.1.13 Get Webelements 和 Get Webelement

Get Webelements 关键字用来获取所有获得的 WebElement 对象的列表

  • 接收[locator ]一个参数,locator 可以通过 id、name、xpath 等进行定位

Get Webelement 关键字和 Get Webelements 类似,只不过 Get Webelement 只会返回匹配到的第一个 WebElement 对象

请添加图片描述

5.1.14 Get Window Titles

Get Window Titles 用来获取当前已经打开的浏览器窗口的所有 Title

  • 该关键字不需要接收任何参数

请添加图片描述

5.1.15 Go Back 和 Go To

Go BackGo To 关键字分别用来模拟对浏览器进行后退和前进的操作

  • GoBack 关键字不需要接收任何参数
  • Go To 关键字接收[ url ]一个参数,url 是一个需要跳转到的地址

请添加图片描述

5.1.16 Get List Items

Get List Items 关键字用来获取页面中一个下拉列表中的所有下拉选项

  • 该关键字接收[ locator ]一个参数,locator 可以通过 id 或者 name等 来进行元素定位

请添加图片描述

5.1.17 Get Selected List Value

Get Selected List Value 关键字用于获取页面中选中的一个下拉列表的 Value 值

  • 关键字接收[ locator ]一个参数,locator 可以通过 id 或者 name 来进行元素定位

请添加图片描述

5.1.18 Select From List

Select From List By Value 关键字用来模拟从指定的下拉列表中选择指定的下拉列表选项

  • 该关键字接收[ locator | *values ]多个参数,locator 可以通过 id、name来进行元素的定位
    请添加图片描述

5.1.19 Selenium2Library 库其他的自动化测试关键字介绍

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

5.2 SikuliLibrary 库的使用

5.2.1 Sikuli 简介

Sikuli 是一种图形化编程技术,或者也可以说是一种图形化的自动化测试工具,平时在屏幕上看到的任何画面,Sikuli 都可以使用图像识别的方式来进行操作

Sikuli 不需要像 WebDriver 那样通过查找元素的方式去对页面进行定位,而是使用屏幕截图的方式来定位页面的按钮等,Sikuli 用于自动化测试的优点如下:

  1. 可以测试不易识别或无法定位的对象,比如地图、Flash 和图表等
  2. 可以验证和识别图片
  3. 直接对图片进行操作,更加通俗易懂,容易维护
  4. 适用于 Window/Linux/Mac OS X 桌面应用,甚至是 iPhone 和 Android 模拟器的自动化测试

Sikuli 同样也有很大的缺点:

  1. 对于相似的图片或者按钮容易识别错误
  2. 由于只能对图像进行操作,因此不够灵活,一般只能用于辅助测试,比较适合于辅助 WebDriver 进行 Web 自动化测试

安装 robotframework-SikuliLibrary

pip install robotframework-SikuliLibrary

请添加图片描述

导入 SikuliLibrary

请添加图片描述

示例

请添加图片描述

  • 注:我这边 Click 关键字报错“com.github.rainmanwy.robotframework.sikulilib.exceptions.TimeoutException: Timeout happened, could not find P(/Users/chengrui/Documents/TestData/baidu_logo.png) S: 0.699999988079071”,使用 Get Match Score 关键字获取到的匹配度为0,难道是此库与 Python 3 不兼容?
    请添加图片描述

5.2.3 SikuliLibrary 的工作原理

Robot Framework 的 SikuliLibrary 库和 Sikuli 之间的通信关系如下,借助 Robot Framework 提供的 XML-RPC 协议的 Remote 服务进行通信,通过 Remote 调用方式来连接用 Java 语言实现的 Sikuli API 操作,正是由于有了 XML-RPC协 议的远程调用,使得不管是 Python 语言、Java 语言或者其他语言都可以调用 Sikuli的Java API

  • 关于 Remote 的调用方式,在后面还会继续详细讲解
    请添加图片描述

另外,从 SikuliLibrary 的源码中我们也可以分析出其调用的方式,在 SikuliLibrary 的 Python 源码 sikuli.py 中有如下几个重要的 Python 函数

  • __init__函数中定义了初始化操作,并且指定了默认 mode 为 OLD 模式,OLD 模式下 Sikuli 对应的 Java API 进程会在 init 初始化的时候跟随一起启动
  • start_sikuli_process 函数中定义 Sikuli Java API 进程的启动过程,从源码中可以看到,启动时是通过执行 java -jar SikuliLibrary.jar 命令的方式来启动 SikuliLibrary 的 Java API 进程,通过 connect_remote_library 函数来连接启动好的 Java Remote 服务,然后通过 run_keyword 函数来执行 Ride 上传入的关键字操作
  • sikuli.py 的部分源码如下:
    请添加图片描述
    请添加图片描述

5.2.4 SikuliLibrary 常用关键字介绍

请添加图片描述

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

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

相关文章

2022CTF培训(十)IOT 相关 CVE 漏洞分析

附件下载链接 这里选择的设备是一款家用路由器,型号为 D-Link DIR-850L(EOL) 。由于该款路由器已停产,官网无法下载到固件,不过目前这个网站还能下载到相关的固件,当然附件中也会提供需要分析的固件。 固件解密 以 DIR850LB1_FW…

归一化 (Normalization)、标准化 (Standardization)和中心化/零均值化 (Zero-centered)

目录 一、概念 1、归一化(Normalization): 2、标准化(Standardization): 3、中心化/零均值化(zero-centered): 二、联系和差异: 三、标准化和归一化的多种…

Faster RCNN网络源码解读(Ⅵ) --- RPN网络代码解析(上)RPNHead类与AnchorsGenerator类解析

目录 一、代码作用(rpn_function.py) 二、代码解析 2.1 RPNHead类 2.2 AnchorsGenerator类 2.2.1 初始化函数__init__ 2.2.2 正向传播过程 forward 2.2.3 set_cell_anchors生成anchors模板 2.2.4 generate_anchors生成anchors 2.2.5 cached_g…

【Linux】vim 中批量添加注释

本期主题:vim 中批量添加注释博客主页:小峰同学分享小编的在Linux中学习到的知识和遇到的问题小编的能力有限,出现错误希望大家不吝赐 此文主要介绍两种方法:方法一 :块选择模式;方法二: 替换命令 &#x…

Java基础随手记

数组 数组的使用 数组可以存放多个同一类型的数据,数组也是一种数据类型,是引用类型。即:数组就是一组数据 问题引入 传统的解决方式 使用数组来解决 可以看到,我们创建了一个double类型元素的数组,将我们要计算…

buuctf-misc-[GKCTF 2021]你知道apng吗1

先下载附件,快要过年了,十二月份还没发过文章,紧急写一篇。 下载文件后缀名为apng 搜索一下APNG(基于PNG的位图动画格式)_百度百科 利用火狐浏览器可以打开 类似gif图片的格式,用专门工具进行拆解&#xf…

MySQL内部的核心组件

mysql前言 1.MySQL的驱动 2.数据库的连接池 3.MySQL的工作线程 4.SQL接口 5.SQL解析器 6.查询优化器 7.执行器组件 8.存储引擎接口 1.MySQL的驱动是做什么的? 尤其记得刚刚学习MySQL的时候,引入的pom坐标:mysql-connector-java,这…

软考- 计算机组成原理与体系结构

【考点梳理】 考点1、数据的表示(★★★★) 考点1.1、进制的转换 【考法分析】 本考点的基本考法是与内存地址计算、IP地址计算结合考查。 【要点分析】 1、十进制转R进制(短除法); 2、R进制转十进制&#xff0…

Arduino与Proteus仿真实例-WS2812实现音乐氛围灯仿真

WS2812实现音乐氛围灯仿真 本文将使用WS2812实现一个音乐氛围灯。Arduino通过检测音频信号强度,然后转换成W2812灯带驱动信号,从而实现音乐氛围灯。 WS2812的驱动和使用在前面的文章中作了详细的介绍,请参考: Arduino与Proteus仿真实例-WS2812-RGB-LED灯带酷炫效果仿真Ar…

【软件质量】软件质量分析总结报告

软件质量-----“软件与明确地和隐含地定义的需求相一致的程度” 一、质量的概念 Ⅰ、传统的质量概念:产品性能是否符合技术规范 Ⅱ、质量是一组固有特性满足要求的程度 Ⅲ、适用性质量 Ⅳ、质量不仅指产品质量,也指过程和体系的质量 二、软件质量 Ⅰ、产品质…

教你如何用一行Python代码实现GUI图形界面

文章目录一、选择文件夹二、选择文件三、选择日期四、输入文本五、弹窗无按钮六、弹窗无标题七、弹窗只有OK按钮八、弹窗只有Error按钮(红色)九、显示通知窗口十、弹窗选择十一、自定义弹窗实战一、选择文件夹 首先导入PySimpleGUI库,并且用缩写sg来表示。 import…

Kubernetes 笔记(02)— 基本架构、工作机制简述、Master 组件、Node 组件

1. Kubernetes 的基本架构 Kubernetes 采用了现今流行的“控制面 / 数据面”(Control Plane / Data Plane)架构,集群里的计算机被称为“节点”(Node),可以是实机也可以是虚机,少量的节点用作控制…

【CUDA入门笔记】GPU存储结构模型(2)

GPU存储结构模型 1.CPU可以读写GPU设备中的Global Memory、Constant Memory以及Texture Memory内存储的内容;主机代码可以把数据传输到设备上,也可以从设备中读取数据; 2.GPU中的线程使用Register、Shared Memory、Local Memory、Global Me…

python网络程序设计,TCP协议客户端服务端智能聊天设计

计算机网络基础知识 网络体系结构,分层设计的好处 网络协议三要素:语法、语义、时序 常见应用层协议:ftp、http、smtp、pop3、telnet…… 传输层主要概念:TCP、UDP、端口号 IP地址 MAC地址 计算机网络基础知识 IP地址 1.IP地址 …

内核RCU的一次实践——实战中加深了理解

遍历内核链表是个常规操作,遍历链表过程可能会向链表增加新成员或者从链表剔除老成员,因此遍历链表时一般需要spin lock加锁保护。如果向链表增加新成员或者从链表剔除老成员不经常出现,大部分只是遍历查询链表中成员,此时链表遍…

Spring Cloud:eureka注册中心

在传统的单体应用中,所有的业务都集中在一个服务器中,当浏览器发起请求时,通过前端请求调用后端接口,后端接口调用相应的业务并在前端进行响应,整个的调用就是从请求到响应的一条龙服务。所以不存在服务之间的中转&…

jetson nano GPIO引脚控制舵机

文章目录一.舵机介绍二.舵机工作原理180度舵机360度舵机三.利用jetson nano GPIO控制舵机1.jetson nano与舵机接2.c编写程序输出脉冲(Qt做界面)一.舵机介绍 舵机,是指在自动驾驶仪中操纵飞机舵面(操纵面)转动的一种执行部件。分有&#xff1a…

代码随想录算法训练营第十三天(栈与队列)| 239. 滑动窗口最大值,347.前 K 个高频元素

代码随想录算法训练营第十三天(栈与队列)| 239. 滑动窗口最大值,347.前 K 个高频元素 239. 滑动窗口最大值 之前讲的都是栈的应用,这次该是队列的应用了。 本题算比较有难度的,需要自己去构造单调队列,建…

std::map使用方式以及注意事项(关于相同key的问题)

std::map的使用在C开发中也是经常会用到的一些东西,这里进行一些简单的使用记录,包括如何插入、删除以及修改等。 1、std::map插入: map的插入使用的是insert的方式,一个map包含了key与value两个值。首先需要对两个值进行赋值&a…

Spring Security认证授权练手小项目 腾讯视频VIP权限管理功能

腾讯视频VIP权限管理1、项目功能视频演示2、需求与设计1、需求2、功能概要3、接口设计3、项目源码结构4、项目源码下载5、项目部署1、部署架构2、数据库环境准备3、redis环境准备4、Spring Boot服务准备5、nginx负载均衡准备6、nginx静态资源服务器准备6、项目介绍1、技术架构2…