【接口自动化测试】selenium旗舰版Web测试理论篇

news2024/11/27 6:31:09

【接口自动化测试】selenium旗舰版Web测试理论篇

一、Web自动化测试

1.1 简介

1.2 优势 

1.3 E2E测试

二、主流的Web自动化测试工具

三、SeleniumWeb自动化测试

3.1 conda终端一键搭建命令

3.2 测试浏览器

3.2.1 步骤①:自动打开浏览器

3.2.2 步骤②:元素的定位:八大定位策略

3.3 牛刀小试!定位百度搜索框


一、Web自动化测试

1.1 简介

Web自动化测试是指使用自动化工具模拟用户在浏览器中的操作,例如点击、输入文本、登陆账号等,以验证Web应用程序是否按照预期工作。这种测试可以大量的节省时间和人力成本。本文将讲解Web自动化测试,并简单的测试百度功能。

1.2 优势 

Web自动化测试的优点有很多,这里只列出几个重要的优势:

  1. 提高测试效率:自动化测试可以快速的同时模拟多个用户进行测试;
  2. 提高测试覆盖率:自动化测试可以重复执行测试用例,确保每一个功能都被检测到;
  3. 提高软件质量:可以发现软件缺陷得以关闭;

1.3 E2E测试

Web自动化测试属于E2E测试,是软件质量保证的探测器

E2E测试是指端到端测试(End-to-End Testing),它是一种软件测试方法,用于测试整个系统在实际运行环境中的功能和性能。

E2E测试从开始到结束测试整个系统,包括所有的组件、服务和系统之间的交互。这种测试方法旨在模拟真实的用户场景和使用情况,以便发现系统中的任何问题和潜在的缺陷。

E2E测试是软件开发过程中最关键的测试之一,它可以确保软件系统的正确性、稳定性和可靠性。

二、主流的Web自动化测试工具

Web自动化测试的主流框架有:

  1. Selenium: selenium是最早出现的自动化测试框架之一,它支持多种浏览器和多种编程语言。目前世界各地使用它的公司是最广的,它拥有着丰富的社区和文档,遇到的问题几乎都有人遇到过,一搜既有大量的经验借鉴。
  2. Cypress:cypress是一个新的自动化测试框架,它的特点是速度快、稳定性高、易用性强。它可以在Chrome、Firefox和Electron中运行,支持JavaScript语言。它使用了类似于React的虚拟DOM管理页面元素,可以提高测试效率。但是,Cypress不支持多浏览器测试。
  3. Playwright:playwright是由Microsoft开发的自动化测试框架,也支持多种浏览器和编程语言,可以运行多种操作系统上。它支持多浏览器测试,而且执行速度比Selenium还有快,也比Cypress更灵活、支持更多的浏览器操作。但是,Playwright还比较新,社区和文档方面还不够成熟,可能遇到错误没有地方查找资料。

30ee5f9931a34649b08385d1a8e97876.jpg

掌握任何一个Web自动化测试工具都可以进行自动化测试,所以我们需要选择一个来专研。Selenium我们有许多们选择它的理由:

  • 浏览器支持最多,兼容最好
  • 最新的Selenium4综合各方面都非常棒
  • 生态成熟,文档丰富,历史悠久
  • 同时还可以进行App端的自动化测试

三、SeleniumWeb自动化测试

3.1 conda终端一键搭建命令

pip install webdriver_helper==1.0.1 -i https://pypi.mirrors.ustc.edu.cn/simple

 必须设定版本号为1.0.1🥒

不然会出现以下错误:

ImportError: cannot import name 'get_webdriver' from 'webdriver_helper' (unknown location)

这是因为,更高版本的webdriver_helper是要收费的,而pip自动下载的是最高版本的库。

3.2 测试浏览器

3.2.1 步骤①:自动打开浏览器

from webdriver_helper import *
'''
with ... as ... 语句可以无需使用driver.quit()关闭浏览器,当程序结束时会自动做这个操作。
complex sample:
driver = get_webdriver()
driver.get("htpps://baidu.com")
driver.quit()
'''
with get_webdriver() as driver:
    driver.get("https://baidu.com")

webdriver-helper做了什么事情呢?

  • 自动获取操作系统的类型和浏览器的版本;
  • 自动下载安装浏览器的驱动;
  • 自动创建和返回WebDriver对象。

3.2.2 步骤②:元素的定位:八大定位策略

from selenium.webdriver.common.by import By

由selenium提供的定位策略,一共有八个,大致按照原理可以分为三组。第一二组一般不会使用,因为一二组本质上也是使用第三组来写的底层,所以只需要了解一二组,掌握第三组的方法。

使用定位策略函数:(driver为定义好的get_webdriver()对象)

  1. driver.find_element_by_id() 【弃用】
  2. driver.find_element(By.ID, "")【常用】
  3. driver.find_elements(By.ID, "")【在2的基础上加上s:找到一组多个元素】

分组①:根据文本定位<a></a>标签

当且仅当可以定位<a></a>标签,这个标签一般长这样,href超链接,中间位文本,用于网页跳转:

<a href="https://101.34.221.219:8010/?s-user/logininfo.html">登录</a>

根据文本定位<a><a/>标签有两种办法:

  • LINK_TEXT:精确定位,输入完整的文本。如:登录,使用方法为:
element = driver.find_element(By.LINK_TEXT,"登陆") 
# 两个参数: 1.选择定位策略为文本定位,2.根据<a></a>中间的文本”登陆“定位对应的文本框。
  • PARTIAL_LINK_TEXT:模糊定位,输入文本部分内容。如:登,使用方法为:
element = driver.find_element(By.PARTIAL_LINK_TEXT,"登") 
# 两个参数: 1.选择定位策略为文本定位,2.根据<a></a>中间的文本”登“定位对应的文本框。

分组②:根据属性,定位任意元素

假设我们要定位input搜索框元素,使用如下HTML语言来刨析:

<div class="search-group">
<input
    id="search-input"
    name="wd"
    type="text"
    placeholder="其实搜索很简单!"
    value=""
    autocomplete="off">
<button 
    type="submit 
    id="ai-topsearch
    class=submit am-btn">...
</button>
</div>

根据属性定位有四种办法:

  • ID:根据元素的id进行定位,如:search-input,使用方法如下:
element = driver.find_element(By.ID,"search-input")
 # 定位input元素
  • NAME:根据元素的name进行定位,如:wd,使用方法如下:
element = driver.find_element(By.NAME,"wd") 
# 定位input元素
  • CLASS_NAME:根据元素的class属性进行定位,如:submit am-btn,使用方法如下:
element = driver.find_element(By.CLASS_NAME,"submit am-btn")
 # input元素无class标签定位button元素

会报错:无法找到这个元素,提示请使用CSS来查找这个元素。

实际上这个方法是通过分组3的CSS来完成定位的,底层其实还是用的CSS。所以当第二个参数位“submit am-btn”时,不符合CSS的语法,导致无法使用这个参数的内容进行定位。

  • TAG_NAME:根据元素的名字来进行定位,如:input,使用方法如下:
element = driver.find_element(By.TAG_NAME,"input") 
# 定位input元素

分组③:通用定位策略:可以定位到任意元素

假设我们要定位button按钮元素,使用如下HTML语言来刨析:

<div class="search-group">
<input
    id="search-input"
    name="wd"
    type="text"
    placeholder="其实搜索很简单!"
    value=""
    autocomplete="off">
<button 
    type="submit 
    id="ai-topsearch
    class=submit am-btn">
<i class="am-icon-search"></i>
<span>搜索</span>
</button>
</div>

通用定位策略有两种CSS和XPath,这里我们只是讲解常用的CSS:

CSS:根据CSS选择器语法进行定位,其中常用的选择器语法有4种:

  • ID选择器:使用#符号后跟元素的ID名称来定位元素。例如:button#my-element。

element = driver.find_element(By.CSS_SELECTOR, "button#ai-topsearch")
# 定位button元素
  • 类选择器:使用.符号后跟元素的类名称来定位元素。例如:button.submit am-btn,如果名称如“submit am-bin"包含空格,那么意味着该button同时包含①submit和②am-btn两个类,需要使用.号分隔,即.submit.am-btn。

element = driver.find_element(By.CSS_SELECTOR, "button.submit.am-btn")
# 定位button元素
  • 属性选择器:使用元素的属性来进行定位。例如::input[type="text"] 。

search_box = driver.find_element(By.CSS_SELECTOR, "input[type='text']")
  • 组合选择器:使用多个属性同时定位元素,使用方法如下:

# 假设已经初始化了driver变量,为WebDriver对象
input_elem = driver.find_element(By.CSS_SELECTOR, "input#search-input[name='wd'][type='text'][placeholder='其实搜索很简单!'][autocomplete='off']")

3.3 牛刀小试!定位百度搜索框

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")

search_input = driver.find_element(By.CSS_SELECTOR, "input#search-input")
search_input.clear()  # 清空输入框
search_input.send_keys("Python")  # 输入关键词

driver.quit()  # 关闭浏览器

解释:

  1. 首先导入webdriverBy库。

  2. 打开Chrome浏览器,然后进入百度首页。

  3. 使用find_element方法通过CSS选择器定位到输入框元素。CSS选择器表示为input#search-input,表示选择id属性为"search-input"的<input>元素。(这一步可以尝试多种方式)

  4. 使用clear方法清空输入框中的内容,然后使用send_keys方法输入关键词"Python"。

  5. 关闭浏览器,结束程序。

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

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

相关文章

基于pytorch的车牌识别(一)

目录 CCPD2019数据集CCPD数据集标注信息单例再现 CCPD2019数据集 本项目所有的数据都是基于CCPD2019数据集&#xff0c;CCPD2019数据集包含了25万多幅中国城市车牌图像和车牌检测与识别信息的标注&#xff0c;主要采集于合肥市&#xff0c;采集人员手持Android POS机对停车场的…

轻量级网络EfficientNetB0,利用迁移学习中的微调技术进行小样本轴承故障诊断(Python代码,带有数据集,训练集集的每类只需10个样本)

1. 训练集数量&#xff08;正常类别&#xff1a;10个&#xff0c;内圈故障&#xff1a;10个&#xff0c;外圈故障&#xff1a;10个&#xff0c;滚动体故障&#xff1a;10个&#xff09; 测试集数量&#xff08;正常类别&#xff1a;90个&#xff0c;内圈故障&#xff1a;90个&…

LeetCode第160题——相交链表(Java)

题目描述&#xff1a; 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交**&#xff1a;** 题目数据 保证 整个链式结构中不存在环。 注意&…

非线性扰动观测器的基本设计

非线性扰动观测器的基本设计 目录 非线性扰动观测器的基本设计前言问题描述扰动观测器设计小结参考资料 前言 因为看到论文中有扰动观测器的设计&#xff0c;但只是大概地明白设计的原理&#xff0c;实际上不明白扰动观测器是如何设计出来的。因此在查阅了相关文献和文章后&am…

树的刷题,嗝

今天忘记带本子了,就没有学习java了,于是一心刷题,好烦遇到了两个奇怪的题目,我没跟题解写的,但是我是没想到奇怪的样例. no.1 617. 合并二叉树 难度简单1221收藏分享切换为英文接收动态反馈 给你两棵二叉树&#xff1a; root1 和 root2 。 想象一下&#xff0c;当你将其中…

【数据结构】第十三站:排序(中)快速排序

本文目录 一、快速排序递归法1.快速排序思想2.hoare版本实现快速排序3.hoare版本的优化1>使用随机值rand()函数2>三数取中3>三路划分 4.证明hoare版本的key在左边&#xff0c;必须让右边先走5.挖坑法实现快速排序6.将前面快排的一趟排序给提取出来7.双指针法实现快速排…

java小技能:使用FeignClient

文章目录 引言I FeignClient1.1 定义FeignClient1.2 启用FeignClient1.3 使用FeignClient引言 一款不错的SpringCloud 脚手架项目:注册中心(nacos)+RPC(feign) https://blog.csdn.net/z929118967/article/details/127966912 RPC(feign):使用Feign的方式,进行微服务调…

AlgoC++第九课:手写AutoGrad

目录 手写AutoGrad前言1. 基本介绍1.1 计算图1.2 智能指针的引出 2. 示例代码2.1 Scale2.2 Multiply2.3 Pow 总结 手写AutoGrad 前言 手写AI推出的全新面向AI算法的C课程 Algo C&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考。 本次课程主要是手写 AutoGrad …

逆向动态调试工具简介

常用逆向工具简介&#xff1a; 二进制尽管属于底层知识&#xff0c;但是还是离不开一些相应工具的使用&#xff0c;今天简单介绍一下常用的逆向工具OD以及他的替代品x96dbg&#xff0c;这种工具网上很多&#xff0c;也可以加群找老满&#xff08;184979281&#xff09;&#x…

java实现乘法的方法

我们都知道&#xff0c;乘法运算的核心思想就是两个数相乘&#xff0c;如果能将乘法运算转化成一个加数的运算&#xff0c;那么这个问题就很容易解决。比如我们要实现23的乘法&#xff0c;首先需要定义两个变量&#xff1a;2和3。我们将这两个变量定义为一个变量&#xff1a;2x…

如何利用Mybatis-Plus自动生成代码(超详细注解)

1、简介 MyBatis-Plus (opens new window)&#xff08;简称 MP&#xff09;是一个 MyBatis (opens new window)的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 特性 无侵入&#xff1a;只做增强不做改变&#xff0c;引入…

一例感染型病毒样本的分析

这个样本是会释放两个dll和一个驱动模块&#xff0c;通过感染USB设备中exe文件传播&#xff0c;会向C&C下载PE执行&#xff0c;通过rookit关闭常用的杀软&#xff0c;是一例典型的感染型病毒&#xff0c;有一定的学习价值。 原始样本 样本的基本信息 Verified: Unsigned …

免费无需魔法会语音聊天的ChatGPT

今天发现了一个很好的ChatGPT&#xff0c;可以语音聊天&#xff0c;而且免费无需魔法 角色目前包括夏洛克、雷电影等等&#xff0c;对话的声调完全模拟了原角色&#xff01; 目前只有英文和日语两种对话&#xff0c;我们可以文字输入或者语音输入&#xff0c;中文即可&#xff…

泰克Tektronix DPO5204B混合信号示波器

特征 带宽&#xff1a;2 GHz输入通道&#xff1a;4采样率&#xff1a;1 或 2 个通道上为 5 GS/s、10 GS/s记录长度&#xff1a;所有 4 个通道 25M&#xff0c;50M&#xff1a;1 或 2 个通道上升时间&#xff1a;175 皮秒MultiView zoom™ 记录长度高达 250 兆点>250,000 wf…

M序列测量幅频特性

M序列 M 序列是一种伪随机序列&#xff0c;具有很好的伪噪声特性&#xff0c;常用于信道噪声测试和保密通信。不过 M 序列还有一个用途&#xff0c;也就是本文所介绍的——通过 M 序列测量频率响应。在讨论这个问题之前&#xff0c;我们先介绍 M 序列的特征与生成方法。 M 序列…

活力二八:CRM助力销售管理再现“浓缩”新活力

活力28、沙市日化&#xff01; 央视段子手朱广权再次喊出这句口号时&#xff0c;迅速激活了人们心中对于曾经“日化一哥”的记忆。 作为市场占率曾超 70% 的家清品牌&#xff0c;活力二八业务始于1950年&#xff0c;前身为沙市油脂化工厂&#xff0c;伴随中国改革开放大潮&…

第十一章_SpringBoot集成Redis

总体概述 redisTemplate-jedis-lettuce-redission之间的的联系 1、redisTemplate是基于某个具体实现的再封装&#xff0c;比如说springBoot1.x时&#xff0c;具体实现是jedis&#xff1b;而到了springBoot2.x时&#xff0c;具体实现变成了lettuce。封装的好处就是隐藏了具体的…

大家都在用的视频音频提取器,免费用!

随着互联网的日益普及&#xff0c;人们可以通过多种方式获取和分享媒体内容&#xff0c;例如通过社交媒体、视频共享网站等。但是&#xff0c;在处理媒体文件时&#xff0c;提取其中的音频或视频仍然是一个挑战。这就是为什么越来越多的人都在使用免费的视频音频提取器。 这些…

Node框架 【Koa】介绍、安装以及使用

文章目录 &#x1f31f;前言&#x1f31f;介绍&#x1f31f;koa优势&#x1f31f;洋葱模型&#x1f31f;安装&#x1f31f;具体步骤&#xff1a;&#x1f31f;创建项目目录&#x1f31f;初始化项目&#x1f31f;进入目录,安装koa &#x1f31f;使用&#x1f31f;案例&#x1f3…

C++STL详解(十一)-- 位图(bitset)

文章目录 位图的介绍位图的引入位图的概念位图的应用 位图的使用位图的定义位图的成员函数位图运算符的使用 位图的模拟实现成员函数构造函数set reset testflip,size,countnone,any,all 位图应用题扩展位图模拟实现代码 位图的介绍 位图的引入 有一道面试题: 给40亿个不重复…