当前位置: 首页 > news >正文

【UI自动化测试技术】自动化测试研究:Python+Selenium+Pytest+Allure,详解UI自动化测试,了解元素交互的常用方法(精)(三)

导言

在之前的文章里,我们一起学习了定位方式、等待机制等内容。相信通过之前的学习,你已经掌握了WEB自动化的一些入门知识,具备了编写代码的一些基础知识和能力。这篇文章,让我们一起学习一下模拟键盘事件。
在实际的项目当中,有的时候,我们需要利用到键盘的一些快捷键对网页进行操作,或点击一些浏览器中的辅助功能,这个时候,我们就要用到键盘事件,编写相应的代码实现模拟键盘的操作。
这篇文章共分四个小阶段(四篇文章),我将会为大家进行分解,方便大家的查阅,提升阅读体验。

学习目标

1、了解元素交互的常用方法本节目标
2、学习如何对多选元素进行操作本节目标
3、学习模拟鼠标进行相关操作
4、学习模拟键盘进行相关操作

Web元素交互

在selenium的官方文档中,介绍了五种基本命令可用于元素的操作。selenium官方中文文档地址:selenium官方文档
下面我们一起来学习:1、点击 (适用于任何元素);2、发送键位 (仅适用于文本字段和内容可编辑元素);3、清除 (仅适用于文本字段和内容可编辑元素);4、提交 (仅适用于表单元素);5、选择 (参见 选择列表元素)
这些方法的设计目的是尽量模拟用户体验, 所以, 与 Actions接口 不同, 在指定制定操作之前,会尝试执行两件事。

点击

元素点击命令执行在元素中央. 如果元素中央由于某些原因被遮挡 , Selenium将返回一个元素点击中断错误。

#导包
from selenium import webdriver
# 初始化浏览器驱动
driver = webdriver.Chrome()
username = "18894687777"  # 设置用户名
password = "123456"  # 设置密码
driver.get("http://csdnadmin/login.com/")  # 打开项目网址
# 点击登陆按钮
driver.find_element(By.XPATH, "//*[@id='btnSearch']").click()  

发送键位

元素发送键位命令 将录入提供的键位到可编辑的 元素. 通常, 这意味着元素是具有文本类型的表单的输入元素或具有内容可编辑属性的元素。如果不可编辑, 则返回 无效元素状态错误。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keysdriver = webdriver.Chrome()
driver.get("http://www.google.com")
#模拟键盘事件-回车键操作,表示确定
driver.find_element(By.NAME, "q").send_keys("测试文字" + Keys.ENTER)

清除

元素清除命令重置元素的内容,这要求元素可编辑, 且可重置通常, 这意味着元素是具有文本类型的表单的输入元素或具有 内容可编辑属性的元素. 如果不满足这些条件, 将返回无效元素状态错误。

el = driver.find_element(By.XPATH, "//input[@name='searchKey']")
el.send_keys("大王")
sleep(3)
#清除操作
el.clear()

提交

在Selenium 4中, 不再通过单独的端点以及脚本执行的方法来实现.。因此, 建议不要使用此方法, 而是单击相应的表单提交按钮。可以忽略,此处不做讲解。

选择

1、如何访问本地化的html文件?
头部给出 – file://
尾部给出 – 系统中的绝对路径
2、与其他元素相比,选择列表具有特殊的行为。选择元素可能需要大量样板代码(boilerplate code)才能自动化. 为了减少这种情况并使您的测试更简洁, 在Selenium的support包中有一个 Select 类。

#导包
from selenium import webdriver
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
# 创建一个select对象
select_element = driver.find_element(By.ID, 's1Id')
select_object = Select(select_element)
sleep(3)
#有三种方法可以选择选项
#选项索引
select_object.select_by_index(1)
sleep(3)
#选项value属性值
select_object.select_by_value('o3')
sleep(3)
#选项文本
select_object.select_by_visible_text('o3')
sleep(3)
#检查所有被选择的选项
all_selected_options = select_object.all_selected_options
print("=======检查所有被选择的选项========")
print(all_selected_options
#返回列表中第一个被选择的选项
first_selected_option = select_object.first_selected_option
print("=======返回列表中第一个被选择的选项========")
print(first_selected_option)
#返回列表的所有选项
all_available_options = select_object.options
print("=======返回列表的所有选项========")
print(all_available_options)
# ==========有四种方法可以取消选择,仅适用于多选列表==========
#创建一个多选select对象
select_element = driver.find_element(By.XPATH, "//*[@multiple='multiple']")
select_multiple_object = Select(select_element)
select_multiple_object.select_by_index(3)
select_multiple_object.select_by_index(1)
sleep(3)
# 确定是否允许多选
does_this_allow_multiple_selections = select_multiple_object.is_multiple
print("==========确定是否允许多选==========")
print(does_this_allow_multiple_selections)
#选项索引
select_multiple_object.deselect_by_index(3)
#选项value属性值
select_multiple_object.deselect_by_value('o1val')
#选项文本
select_multiple_object.deselect_by_visible_text('o3')
#取消所有被选择的选项
select_multiple_object.deselect_all()

相关文章:

【UI自动化测试技术】自动化测试研究:Python+Selenium+Pytest+Allure,详解UI自动化测试,了解元素交互的常用方法(精)(三)

导言 在之前的文章里,我们一起学习了定位方式、等待机制等内容。相信通过之前的学习,你已经掌握了WEB自动化的一些入门知识,具备了编写代码的一些基础知识和能力。这篇文章,让我们一起学习一下模拟键盘事件。 在实际的项目当中&a…...

GPT-4带来的思想火花

GPT-4能够以其强大的生成能力和广泛的知识储备激发出众多思想火花。它能够在不同的情境下生成新颖的观点、独特的见解和富有创意的解决方案,这不仅有助于用户突破思维定势,还能促进知识与信息在不同领域的交叉融合。 1.GPT-4出色的创新思考和知识整合能…...

使用倒模耳机壳UV村脂胶液制作舞台监听耳返入耳式耳机壳有哪些优点?

使用倒模耳机壳UV树脂胶液制作舞台监听耳返入耳式耳机壳有很多优点,具体如下: 高音质表现:通过倒模工艺制作的耳机壳能够更好地贴合耳朵,减少声音散射和反射,提高声音的清晰度和质感。这对于舞台监听来说非常重要&…...

html从零开始8:css3新特性、动画、媒体查询、雪碧图、字体图标【搬代码】

css3新特性 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, …...

HAL库 STM32驱动W25QXX驱动例程

HAL库 STM32驱动W25QXX驱动例程 &#x1f4cd;驱动程序参考&#xff1a;《STM32CubeMX | 基于STM32使用HAL库W25Q128驱动程序》&#x1f511; 驱动方式&#xff1a;硬件SPI方式和SPI DMA方式。&#x1f516;适用于&#xff1a;W25X系列/Q系列芯片:W25Q80、W25Q16、W25Q32、 W25…...

C#入门及进阶|数组和集合(九):Stack类

在C#中&#xff0c;通过类Stack来封装对栈的操作&#xff0c;使得对栈的操作变得非常简单和容易理解。 栈是按照“后进先出”的原则来操作元素。 栈集合常用的属性和方法: 属性说明Count获取 Stack 中包含的元素数。方法说明Peek返回位于栈顶部的对象但不将其移除。Po…...

算法训练day31贪心算法理论基础Leetcode455分发饼干376摆动序列53最大子序和

贪心算法理论基础 文章链接 代码随想录 (programmercarl.com) 说实话贪心算法并没有固定的套路。最好用的策略就是举反例&#xff0c;如果想不到反例&#xff0c;那么就试一试贪心吧。 面试中基本不会让面试者现场证明贪心的合理性&#xff0c;代码写出来跑过测试用例即可&…...

Java与JavaScript同源不同性

Java是目前编程领域使用非常广泛的编程语言&#xff0c;相较于JavaScript&#xff0c;Java更被人们熟知。很多Java程序员想学门脚本语言&#xff0c;一看JavaScript和Java这么像&#xff0c;很有亲切感&#xff0c;那干脆就学它了&#xff0c;这也间接的帮助了JavaScript的发展…...

【JavaEE】spring boot快速上手

SpringBoot快速上手 文章目录 SpringBoot快速上手Maven会出现的一个官方bug创建完项目之后常用的的三个功能依赖管理Maven仓库中央仓库本地仓库国内源配置私服 springboot项目创建什么是springspring boot项目的创建Hello Worldweb服务器 SpringMVC什么是SpringWebMVC什么是MVC…...

【数据结构】16 二叉树的定义,性质,存储结构(以及先序、后序、中序遍历)

二叉树 一个二叉树是一个有穷的结点集合。 它是由根节点和称为其左子树和右子树的两个不相交的二叉树组成的。 二叉树可具有以下5种形态。 性质 一个二叉树第i层的最大结点数为 2 i − 1 2^{i-1} 2i−1, i ≥ 1 i \geq 1 i≥1 每层最大结点可以对应完美二叉树&#xff08;…...

GPT SOVITS项目 一分钟克隆 (文字输出)

步骤流程&#xff1a;&#xff08;首先使用UVR 提取人声文件&#xff0c;然后按下面步骤进行&#xff09; 注意这里提交的音频是参考的音频...

python34-Python列表和元组之加法

列表和元组支持加法运算&#xff0c;加法的和就是两个列表或元组所包含的元素的总和。 需要指出的是&#xff0c;列表只能和列表相加;元组只能和元组相加;元组不能直接和列表相加。 如下代码示范了元组和列表的加法运算。 # !/usr/bin/env python# -*- coding: utf-8 -*-# T…...

不做程序员了(转岗半年后对程序员岗位的思考)

不做程序员了&#xff08;转岗半年后对程序员岗位的思考&#xff09; 前言 好久没有更新了&#xff0c;已经久到CSDN的小编来问我为什么不更了。原因是我半年前转岗了&#xff0c;不再做程序员了&#xff0c;由程序员变为了产品经理。废话不多说&#xff0c;换个视角来给大家…...

DS:八大排序之直接插入排序、希尔排序和选择排序

创作不易&#xff0c;感谢三连支持&#xff01;&#xff01; 一、排序的概念及运用 1.1 排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起 来的操作。稳定性&…...

【MySQL】-21 MySQL综合-8(MySQL默认值+MySQL非空约束+MySQL查看表中的约束)

MySQL默认值MySQL非空约束MySQL查看表中的约束 MySQL默认值在创建表时设置默认值约束在修改表MySQL默认值在创建表时设置默认值约束在修改表时添加默认值约束删除默认值约束删除默认值约束 MySQL非空约束在创建表时设置非空约束在修改表时添加非空约束删除非空约束 MySQL查看表…...

力扣hot3--并查集+哈希

第一想法是排个序然后遍历一遍&#xff0c;but时间复杂度就超啦 并查集居然与哈希结合了&#xff08;&#xff09; 已经好久没用过并查集了&#xff0c;&#xff0c;&#xff0c;我们用哈希表f_node中来记录原结点的父节点&#xff0c;其中key是原结点&#xff0c;value是父节点…...

微信网页版能够使用(会顶掉微信app的登陆)

一、文件结构 新建目录chrome新建icons&#xff0c;其中图片你自己找吧新建文件manifest.json新建文件wx-rules.json 二、文件内容 对应的png你们自己改下 1、manifest.json {"manifest_version": 3,"name": "wechat-need-web","author…...

word软件中硬件图像加速有什么用处?禁用硬件图形加速(G)会影响word文档中插入图片的分辨率吗?

问题描述&#xff1a;word软件中硬件图像加速有什么用处&#xff1f;禁用硬件图形加速(G)会影响word文档中插入图片的分辨率吗&#xff1f; 问题解答&#xff1a; 在 Microsoft Word 中&#xff0c;硬件图形加速主要用于提高图形元素的渲染速度和性能&#xff0c;特别是处理大…...

.NET Core MongoDB数据仓储和工作单元模式封装

前言 上一章我们把系统所需要的MongoDB集合设计好了&#xff0c;这一章我们的主要任务是使用.NET Core应用程序连接MongoDB并且封装MongoDB数据仓储和工作单元模式&#xff0c;因为本章内容涵盖的有点多关于仓储和工作单元的使用就放到下一章节中讲解了。仓储模式&#xff08;R…...

lua:有关表访问的metamethod

针对在两种正常状态&#xff1a;表的不存在的域的查询和修改&#xff0c;Lua也提供了改变 tables的行为的方法。 index metamethod 我们可以通过index元方法来实现访问table内部不存在的域时人为操控返回数据。 比如以下测试代码&#xff1a; local set {1,2,3} setmetata…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...