前端web自动化测试:selenium怎么实现关键字驱动

news2025/2/23 18:09:42

要做 ui 自动化测试,使用关键字驱动可以说是必须会的一种测试方式,它既可以在纯代码的自动化程序中运行,也可以在测试平台中使用。

使用纯代码方式时,自动化工程师先写好一个通用的程序,其他手工测试人员只需要把执行的页面操作关键字填入到一个表格当中,就可以执行自动化测试了。这个表格可以是 Excel 表格,也可是 yaml 文件。

使用测试平台时,测试开发工程会编写一个界面,在假面中,手工测试人员也可以选择需要操作的页面关键字,选择完以后就可以执行自动化测试了。

关键字驱动实现成本低,操作起来也方便,真是个做 ui 自动化测试的好方式。本文介绍一种简单的关键字驱动实现方式,不需要很高深的编程知识也能掌握。

关键字驱动实现主要分为三个部分:

  • 关键字方法的定义,其实就是页面的通用操作,比如点击、输入等常见操作,由自动化测试工程师编写。
  • 关键字表格配置。谁编写自动化用例,谁配置这个表格,它主要定义用例需要执行的页面操作和测试数据,最好通过脚本自动生成固定格式的文件,并且把可以选择的操作名称说明,方便使用, 在测试平台中,可以通过下拉框搜索和选择的方式选择,会更加方便。
  • 调用关键字,执行页面操作。这个也是由自动化测试工程师编写,读取 yaml 文件中的页面操作,并且执行。

定义关键字方法

如果要对 web 网页进行自动化测试,我们可以定义 Page 类,封装点击、输入等页面操作。

# keywords.py
from selenium.webdriver.remote.webdriver import WebDriver
from selenium.webdriver.remote.webelement import WebElement
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait

DEFAULT_TIMEOUT = 8

class Page:
    def __init__(self, driver: WebDriver):
        self.driver = driver

    def goto(self, url):
    	"""页面访问"""
        self.driver.get(url)

    def wait_clickable(self, locator, timeout=None) -> WebElement:
        timeout = DEFAULT_TIMEOUT if timeout is None else timeout
        wait = WebDriverWait(self.driver, timeout=timeout)
        return wait.until(expected_conditions.element_to_be_clickable(locator))

    def wait_visible(self, locator, timeout=None) -> WebElement:
        timeout = DEFAULT_TIMEOUT if timeout is None else timeout
        wait = WebDriverWait(self.driver, timeout=timeout)
        return wait.until(expected_conditions.visibility_of_element_located(locator))

    def click(self, locator):
    	"""页面点击"""
        el = self.wait_clickable(locator)
        el.location_once_scrolled_into_view
        el.click()

    def fill(self, locator, words):
        """页面输入"""
        el = self.wait_visible(locator)
        el.send_keys(words)

关键字表格

关键字表格是一个自动化用例的测试步骤和数据,这里我们使用 yaml 文件,action 表示要使用的页面操作,它对应前面 Page 类中的同名方法, params 表示方法需要传入的测试参数。

每个不同的用例,编写一个 yaml 文件,当需要运行自动化测试时,把 yaml 文件作为参数传入自动化程序中就可以了。

# login.yaml
-
  action: goto
  params:
    url: "https://petstore.octoperf.com/actions/Account.action?signonForm="
-
  action: fill
  params:
    locator: ['name', 'username']
    words: 'yuze'
-
  action: fill
  params:
    locator: ['name', 'password']
    words: '1234'
-
  action: click
  params:
    locator: ['name', 'signon']

使用关键字操作浏览器

最后是通用的测试用例编写。定义一个 test_keyword 函数, 首先读取 login.yaml 文件中的测试步骤和数据,使用 getattr 方法, 把需要调用的页面操作名称 goto, fill, click 传入,获取 Page 类中的同名方法,调用这些方法就能实现对应的自动化操作。

这些代码大多数不需要进行额外修改,当需要运行不同的测试用例,只需要修改 yaml 文件的名称,调用不同的 yaml 测试步骤。

# test_login.py

import yaml
import pytest
from selenium import webdriver
from keyworks import Page


@pytest.fixture
def driver():
    d = webdriver.Chrome()
    d.implicitly_wait(8)
    d.maximize_window()
    yield d
    d.quit()

def test_keyword(driver):
    """获取 yaml 文件"""
	with open('signin.yaml', encoding='utf-8') as f:
    steps = yaml.safe_load(f)
    page = Page(driver)

    for step in steps:
        action_name = step.get('action')
        params = step.get('params')
        action = getattr(page, action_name)
        action(**params)

运行

现在,我们只需要定义不同的 yaml 文件,然后使用 pytest 这样的测试框架来运行自动化用例就可以。 但是,作为一个简单版关键字驱动实现方式,这个程序还有很多的优化空间。

比如,现在编写多个 yaml 文件后,还需要创建多个 python 的 test 文件。而更加常见的方式是,可以通过命令行配置一个 yaml 文件,我就可以运行该 yaml 文件的测试步骤。

配置多个 yaml 文件,就可以运行多个 yaml 文件的测试步骤。甚至可以配置文件夹名称,就运行文件夹下所有的 yaml 文件的测试步骤。

yaml 文件的生成也可以通过命令行生成。

这个我们在后面在实现,目前来说,我们至少已经知道关键字驱动的实现方式了。


END配套学习资源分享

最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

全套资料获取方式:

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

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

相关文章

Python 中文编码

Python 文件中如果未指定编码,在执行过程会出现报错: #!/usr/bin/python print (“你好,世界”) 以上程序执行输出结果为: File “test.py”, line 2 SyntaxError: Non-ASCII character ‘\xe4’ in file test.py on line 2, b…

接口自动化测试:Python+Pytest+Requests+Allure

本项目实现了对Daily Cost的接口测试: PythonRequests 发送和处理HTTP协议的请求接口Pytest 作为测试执行器YAML 管理测试数据Allure 来生成测试报告。 本项目是参考了pytestDemo做了自己的实现。 1. 项目结构及安装部署 项目结构 api: 接口封装层,…

未来软件测试的5个主要趋势以及软件测试进阶路线

全球各地的企业每天都在发展变化着,以应对市场挑战,满足日益成熟的客户需求。即使是正在进行的技术进步也会使软件测试专家在实践的过程中更加专注和精确。 2021年给软件测试领域带来了新的技术解决方案,以及质量保证和软件测试的实现。与此同…

无线蓝牙耳机哪个品牌好?十款精选的无线蓝牙耳机品牌推荐

蓝牙耳机是一种无线耳机,其通过蓝牙技术与其他设备进行连接,例如手机、电脑、平板电脑等。蓝牙耳机使得用户可以在不受线缆限制的情况下享受音频体验,而且还可以方便地进行通话,目前市场上有许多不同种类和品牌的蓝牙耳机&#xf…

如何利用Python爬虫抓取某眼查网站中的q业信息?

部分数据来源:ChatGPT 引言: 最近在朋友圈看到了一个Python爬虫兼职的机会,但是由于一些原因我没有接到,于是我自己写了一个某眼查搜索结果爬取的Python脚本。下面将分享这个脚本的详细使用教程。 背景 某眼查是一家经营企业信用信息服务的公司,可以通过其网站查询公司信…

ChimeraX - 修改 Multimer 中单链的显示颜色

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/131087434 ChimeraX 软件是一款用于分子可视化和分析的先进工具,可以处理大型数据集,支持多种格式,提…

什么是内存溢出?什么是内存泄露?

文章目录 一、什么是内存溢出? 二、什么是内存泄露? 三、如何避免内存溢出和内存泄露? 一、什么是内存溢出? 假设我们JVM中可用的内存空间只有3M,但是我们要创建一个5M的对象,那么新创建的对象就放不进去了…

十四、混合

第一部分 概念: 1) 引入 OpenGL ES 混合本质上是将 2 个片元的颜色进行调和,产生一个新的颜色。OpenGL ES 混合发生在片元通过各项测试之后,准备进入帧缓冲区的片元和原有的片元按照特定比例加权计算出最终片元的颜色值,不再是新…

07SpringCloud Gateway服务网关

目标 目标 1、服务网关 Gateway 2、ServerWebExchange 3、Gateway使用Bucket4j限流 服务网关Gateway API 网关是一个服务,是系统的唯一入口。从面向对象设计的角度看,它与外观模式类似。API 网关封装了系统内部架构,为每个客户端提供一…

数据湖和数据仓库区别介绍

从数据仓库到数据湖 仓库和湖泊 仓库是人为提前建造好的,有货架,还有过道,并且还可以进一步为放置到货架的物品指定位置。 而湖泊是液态的,是不断变化的、没有固定形态的,基本上是没有结构的,湖泊可以是由…

项目上线出Bug!为什么你作为测试没测出来?

材料收集 你服务于一个数据库查询业务,某次客户现场反馈查询某个语句长时间未返回结果,耗时已经远远超过项目对外提供的性能报告承诺给用户最长查询时间。 问题和相关日志已经传递回来,开发人员进行原因分析和故障修复,测试人员进…

Ubuntu系统denyhosts的使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、denyhosts是什么?二、安装denyhosts1.下载安装包2.安装3.配置4.启动5.测试 总结 前言 今天服务器又被攻击了,防火墙也打开了&#…

劝退忠告:外包实在是太坑了,划水三年,感觉人都废了

先说一下自己的情况,专科生,19年通过校招进入杭州某个外包软件公司,干了接近3年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了3年的功…

Linux使用者必备-13款厉害到让人怒赞的工具大揭秘

本文介绍几款 Linux 运维比较实用的工具,希望对 Linux 管理员有所帮助。 1、查看进程占用带宽情况-Nethogs Nethogs 是一个终端下的网络流量监控工具可以直观的显示每个进程占用的带宽。 下载:http://sourceforge.net/projects/nethogs/files/nethogs…

【MVS+DepthFilter】video-based real-time multi view stereo

1.SVO 半直接视觉里程计 2. SVO2系列之深度滤波DepthFilter 3. SVO(SVO: fast semi-direct monocular visual odometry) 4. svo_note 5. MVSDepthFilter: video-based real-time multi view stereo 6. 作者George Vogiatzis主页 video-based real-time m…

Java版Spring cloud 企业电子招投标系统源码

一、立项管理 1、招标立项申请 功能点:招标类项目立项申请入口,用户可以保存为草稿,提交。 2、非招标立项申请 功能点:非招标立项申请入口、用户可以保存为草稿、提交。 3、采购立项列表 功能点:对草稿进行编辑&#x…

Pytorch版本的Ernie Health源码详解

Pytorch版本的Ernie Health源码详解 一、目录架构 二、尝试使用Ernie Health import torch # 查看torch版本 torch.__version__ 1.12.0cpu# 查看设备是否有GPU资源 # device torch.device(cuda:0 if torch.cuda.is_available() else cpu) device cuda if torch.cuda.is_ava…

I.MX6ULL_Linux_驱动篇(37) linux系统定时器

定时器是我们最常用到的功能,一般用来完成定时功能,本章我们就来学习一下 Linux 内核提供的定时器 API 函数,通过这些定时器 API 函数我们可以完成很多要求定时的应用。 Linux内核也提供了短延时函数,比如微秒、纳秒、毫秒延时函数…

Python selenium爬取影评生成词云图

文章目录 问题描述效果截图如下问题分析前期准备完整代码及解释字体素材 问题描述 通过中文分词、过滤停用词、生成词云图等步骤对评论数据进行处理和可视化。 效果截图如下 非常nice 问题分析 该程序需要使用 Selenium 库来模拟浏览器操作,因此需要下载安装 Chr…

@Autowired VS @Resource

一、两者的区别 首先,两者都是通过注解来实现依赖注入 。不同的话有以下几点: Autowired 是 Spring 提供的注解,所以只有 Spring 的 IoC容器 支持该注解。Resource 是 JSR-250 提供的(是 Java 的标准 ),我…