Web自动化介绍以及8种元素定位方式

news2024/9/20 16:42:15

自动化理论

回归测试: 在进行软件升级、修改或修复bug后,对系统进行回归测试,以确保修改过的部分没有引入新的问题或破坏其他功能。回归测试通常是自动化执行的,并且可以通过比较测试前后的结果来确定系统的稳定性。

压力测试: 对软件系统进行在正常工作负载之外的高负载测试,以观察系统在极限情况下的表现。通过模拟多用户同时访问或大量数据输入等场景,来评估系统在压力下的性能表现和稳定性。

兼容性测试: 在各种不同的硬件、操作系统、浏览器等环境下测试软件系统的兼容性。通过模拟不同的用户设备和环境,来确保系统在各种情况下都能正常运行,并提供一致的用户体验。兼容性测试通常涵盖功能测试、UI测试、性能测试等方面。

Web自动化测试:

Web:基于浏览器 基于HTTP/HTML

移动:App

接口:基于工具和代码

单元测试

黑盒测试:功能测试

白盒测试:单元测试 代码

灰盒测试:接口测试

Web自动化属于黑盒测试(功能测试)

selenium

from time import sleep

from selenium import webdriver

driver = webdriver.Edge()

driver.get('http://www.baidu.com')

sleep(3)

driver.quit()

元素定位

元素定位方式:

id,name,class_name 基于元素属性

id定位:通过元素的id属性定位,id一般情况下在当前页面是唯一 

class_name -> 使用元素的class属性定位

tag_name 基于元素的标签名称  <标签名称

link_text 定位a标签 超链接

partial_link_text  定位a标签 超链接 模糊

XPath (基于元素路径)

CSS (基于元素选择器)

id属性定位

# id 定位
# 导包
from selenium import webdriver
from time import sleep

# 获取浏览器对象
driver = webdriver.Edge()
# \反斜杠在python中是转义字符 r修饰的字符串 如果字符串中有转义字符 不进行转义
# 使用双反斜杠 \\ 进行转义操作
# 使用本地浏览模式 前缀加file:///
url = r"D:\WORK\ww\web自动化_day01_课件+笔记+资料+代码\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html"
driver.get(url)

# 查找用户名元素
username = driver.find_element_by_id("userA")
# 查找密码元素
password = driver.find_element_by_id("passwordA")

username.send_keys("admin")
password.send_keys("123456")

sleep(3)

driver.quit()
from selenium import webdriver
from time import sleep

driver = webdriver.Edge()

driver.get("file:///D:/WORK/ww/web%E8%87%AA%E5%8A%A8%E5%8C%96_day01_%E8%AF%BE%E4%BB%B6+%E7%AC%94%E8%AE%B0+%E8%B5%84%E6%96%99+%E4%BB%A3%E7%A0%81/web%E8%87%AA%E5%8A%A8%E5%8C%96_day01_%E8%AF%BE%E4%BB%B6+%E7%AC%94%E8%AE%B0+%E8%B5%84%E6%96%99+%E4%BB%A3%E7%A0%81/02_%E5%85%B6%E4%BB%96%E8%B5%84%E6%96%99/%E6%B3%A8%E5%86%8CA.html")# 直接复制的

driver.find_element_by_id("userA").send_keys("admin")
driver.find_element_by_id("passwordA").send_keys("123456")

sleep(3)

driver.quit()

name属性定位

# name定位
from selenium import webdriver
from time import sleep

driver = webdriver.Edge()

driver.get(r"D:\WORK\ww\web自动化_day01_课件+笔记+资料+代码\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html")
driver.find_element_by_name("userA").send_keys("admin")
driver.find_element_by_name("passwordA").send_keys("123456")

sleep(3)

driver.quit()

class name属性定位

from selenium import webdriver
from time import sleep

driver = webdriver.Edge()

driver.get(r"D:\WORK\ww\web自动化_day01_课件+笔记+资料+代码\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html")

driver.find_element_by_class_name("telA").send_keys("152.....")

sleep(3)

driver.quit()

id 一般情况下唯一

name最大特色可以重名 就一个name会定位到多个元素

就李四 李四 都是李四 都会找到

class多个命名 可以通过多个class名来找到元素 一个元素对应多个class名

就李四 小四 都是同一个人 都是他 我的理解就是 一个有对应有多个class(李四 小四)名

标签就是元素

标签名称 就是 元素名称

tag_name

a标签 超链接

input type不同

from selenium import webdriver
from time import sleep

driver = webdriver.Edge()

driver.get(r"D:\WORK\ww\web自动化_day01_课件+笔记+资料+代码\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html")

driver.find_element_by_tag_name("input").send_keys("admin")
# 有多个相同的标签名 默认返回第一个
sleep(3)
driver.quit()

link_text 只定位a标签 需要完全匹配 精准匹配

from selenium import webdriver
from time import sleep

driver = webdriver.Edge()

driver.get(r"D:\WORK\ww\web自动化_day01_课件+笔记+资料+代码\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html")

driver.find_element_by_link_text("访问 新浪 网站").click()

sleep(3)
driver.quit()

partial_link_text 只定位a标签 模糊匹配 但是要有唯一代表性

如果没有使用唯一代表词 就是说匹配到了多个 默认就返回第一个匹配到的

from selenium import webdriver
from time import sleep

driver = webdriver.Edge()

driver.get(r"D:\WORK\ww\web自动化_day01_课件+笔记+资料+代码\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html")

driver.find_element_by_partial_link_text("访问").click()

sleep(3)
driver.quit()

XPath

介绍这么多定位方法 就是为了找到我们想要定位的元素

绝对路径:索引从1开始

相对路径://开头

属性用@修饰

相对路径 加 属性

相对路径 加 属性 与 逻辑 结合

层级加属性:

再往前加父级的 再定位

最后简化:

不知道元素名的话 用*替代

from selenium import webdriver
from time import sleep

driver = webdriver.Edge()

driver.get(r"D:\WORK\ww\web自动化_day01_课件+笔记+资料+代码\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html")

# 绝对路径
driver.find_element_by_xpath("/html/body/form/div/fieldset/p[1]/input").send_keys("admin")

# 层级结合属性
driver.find_element_by_xpath(("//p[@id='p1']/input")).send_keys("admin")

sleep(2)
# 相对路径 属性
driver.find_element_by_xpath("//input[@id='passwordA']").send_keys("123")

# 属性与逻辑
driver.find_element_by_xpath("//input[@id='passwordA' and @placeholder='密码A']").send_keys("123")

sleep(3)

driver.quit()

<标签 属性> 文本文本文本</标签>

定位a标签 p标签 仅仅定位文本

from selenium import webdriver
from time import sleep

driver = webdriver.Edge()

driver.get(r"D:\WORK\ww\web自动化_day01_课件+笔记+资料+代码\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html")

driver.find_element_by_xpath("//*[contains(@type,'tA')]").send_keys("admin")
# //*[@id="userA"]

driver.find_element_by_xpath("//*[starts-with(@id,'pa')]").send_keys("123")
# //*[@id="passwordA"]

driver.find_element_by_xpath("//a[text()='访问 新浪 网站']").click()
# //*[@id="fwA"]
sleep(3)

driver.quit()

CSS

层级选择器:

body>input 得是直属关系

body input 只要在其下面即可

属性的话 任意属性

from selenium import webdriver
from time import sleep

driver = webdriver.Edge()
driver.get(r"D:\WORK\ww\web自动化_day01_课件+笔记+资料+代码\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html")

# id选择器
driver.find_element_by_css_selector("#userA").send_keys("admin")

# 属性选择器
driver.find_element_by_css_selector("[name = 'passwordA']").send_keys("123456")

# class选择器
driver.find_element_by_css_selector(".telA").send_keys("15237463726")

# 元素选择器
span = driver.find_element_by_css_selector("span").text

print("获取span的标签文本值", span)

# 层级选择器
driver.find_element_by_css_selector("p>input[placeholder='电子邮箱A']").send_keys("123@.com")

sleep(3)
driver.quit()

from selenium import webdriver
from time import sleep

driver = webdriver.Edge()
driver.get(r"D:\WORK\ww\web自动化_day01_课件+笔记+资料+代码\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html")

# name=什么
# 属性以us开头
driver.find_element_by_css_selector("[name^='us']").send_keys("admin")

# 属性以dA结束
driver.find_element_by_css_selector("[name$= 'dA']").send_keys("123456")

# 属性包含el
driver.find_element_by_css_selector("[name*='el']").send_keys("15237463726")

sleep(3)
driver.quit()

找到一组元素

from selenium import webdriver
from time import sleep

driver = webdriver.Edge()
driver.get(r"D:\WORK\ww\web自动化_day01_课件+笔记+资料+代码\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html")

# 一组元素
# elements = driver.find_elements_by_tag_name("input")

elements = driver.find_elements_by_id("userA")
print(len(elements)) # elements是列表

# 对列表访问就是用下标遍历
# elements[0].send_keys("admin")

for el in elements:
    el.send_keys("admin")

sleep(3)
driver.quit()

类型:8种定位方法

简化定位方法

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

driver = webdriver.Edge()
driver.get(r"D:\WORK\ww\web自动化_day01_课件+笔记+资料+代码\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html")

driver.find_element(By.ID,"userA").send_keys("admin")
driver.find_element(By.CSS_SELECTOR,"#passwordA").send_keys("123456")


sleep(3)
driver.quit()

1,2,3 元素属性

4 标签属性

5,6 超链接

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

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

相关文章

Android Studio 编译无错误 运行无结果一例

好长时间没写Android 代码了&#xff0c;基本规则也忘了。终于在编译成功了&#xff0c;然而运行毫无结果&#xff0c;debug跟踪断点也没有触发。屏幕赫然写着&#xff0c;execute successfully! 。 进行了各种检查&#xff0c;毫无进展。最后&#xff0c;试着重启一下AS&#…

APP启动流程

文章目录 主要构成详细启动流程参考链接 主要构成 App的启动流程主要涉及几个关键步骤和组件的交互&#xff0c;包括Launcher进程、ActivityManagerService&#xff08;AMS&#xff09;、Zygote进程、以及App进程本身。以下是详细的启动流程&#xff1a; 用户操作&#xff1a;…

【代码随想录】【算法训练营】【第49天】 [300]最长递增子序列 [674]最长连续递增序列 [718]最长重复子数组

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day 49&#xff0c;周二&#xff0c;坚持不了一点~ 题目详情 [300] 最长递增子序列 题目描述 300 最长递增子序列 解题思路 前提&#xff1a; 思路&#xff1a; 重点&#xff1a; 代码实现 C…

基于Pytorch框架构建LeNet-5模型

Pytorch 一、训练模型1.导入必要的库2.设置超参数3.数据预处理4.读取数据 二、定义卷积神经网络1.定义卷积神经网络2.定义学习率3.实例化模型并且移动到GPU4.选择优化器 三、定义调整学习率的函数1.定义调整学习率的函数 四、训练模型1.设置模型为训练模式2.遍历训练数据加载器…

北邮《计算机网络》网络层笔记

文章目录 单词复习网络层前言路由算法&#xff08;构造路由表的算法&#xff09;静态路由算法自适应算法 拥塞控制QoS 服务质量&#xff08;小小的一节&#xff09;网络互联&#xff08;还是小小的一节&#xff09;Internet 单词复习 estimates boot off-line in advance refl…

揭秘循环购:消费即收益,如何助力商家月销百万?

大家好&#xff0c;我是吴军&#xff0c;今天要和大家分享一种颠覆性的商业模式——循环购。你是否听说过“消费1000送2000”这样的促销活动&#xff1f;是不是觉得太不可思议&#xff0c;商家岂不是在“送钱”&#xff1f;别急&#xff0c;让我为你揭开这背后的秘密。 循环购&…

web前端——HTML

目录 一、HTML概述 1.HTML是什么&#xff1f; 2.HTML具体化解释 二、HTML基本语法 1.声明 2. Head头标签 3.body身体标签 4.一个html的基本结构 5.标签 6.标签属性 ①属性的格式 ②属性的位置 ③添加多个属性 三、基本常用标签 1.超链接 2.图像标签 ①图像标…

从赛题切入谈如何学习数学建模

1.引言 &#xff08;1&#xff09;今天学习了这个汪教授的这个视频&#xff0c;主要是对于一个赛题的介绍讲解&#xff0c;带领我们通过这个赛题知道数学建模应该学习哪些技能&#xff0c;以及这个相关的经验&#xff0c;我感觉这个还是让我自己受益匪浅的 &#xff08;2&…

docker 配置与使用

目录 安装docker 作者遇到的问题1&#xff1a;安装docker 错误说明 解决方法&#xff1a; 作者遇到问题2&#xff1a;GPG密钥问题 问题说明 解决方法&#xff1a; 方法一&#xff1a;使用备用的GPG密钥服务器 方法二&#xff1a;使用国内镜像源 方法3&#xff1a;手动下…

项目性能优化之给dist文件夹中chunk-vendors.js做splitChunks分包,从而减少首屏加载时间

问题描述 我们项目做完,验收通过以后,就需要打包发布上线啦。于是我们执行命令:npm run build打dist包,打包完以后截图如下: 直接打包的chunk-vendors.js太大了 chunk-vendors.js文件太大了,所以我们需要将其优化一下,拆分一下 chunk-vendors.js是啥 chunk-vendors.j…

springboot+vue+mybatis穷游管理系统+PPT+论文+讲解+售后

随着现在网络的快速发展&#xff0c;网上管理系统也逐渐快速发展起来&#xff0c;网上管理模式很快融入到了许多企业的之中&#xff0c;随之就产生了“基于vue的穷游管理系统”&#xff0c;这样就让基于vue的穷游管理系统更加方便简单。 对于本基于vue的穷游管理系统的设计来说…

数据挖掘概览

数据挖掘(Data Mining)就是从大量的,不完全的,有噪声的,模糊的,随机的实际应用数据中,提取隐含在其中的,人们事先不知道的,但又是潜在有用的信息和知识的过程. 预测性数据挖掘 分类 定义&#xff1a;分类就是把一些新的数据项映射到给定类别中的某一个类别 分类流程&#x…

云层之间穿梭特效视频转场PR模板素材

12 个超赞的 Premiere Pro 云层穿梭特效视频转场模板 https://prmuban.com/39056.html &#x1f4fd; 你是否正在寻找一种方法&#xff0c;让你的视频更酷、更时尚、更吸引人&#xff1f;今天推荐的12个逼真的云层穿梭特效视频转场模板&#xff0c;绝对能为你的作品锦上添花 ✨…

微服务SpringCloud,SpringAliBaBa(2)

微服务02 1.网关路由 网络的关口&#xff0c;负责请求的路由、转发、身份校验。 有了网关之后&#xff0c;微服务的地址不用在暴露了&#xff0c;就暴露个网关地址。 快速入门 routes代表一套路由&#xff0c;pridicates是规则&#xff0c;对请求做出判断&#xff0c;看是哪…

《第一行代码 第3版》学习笔记——第十一章 网络技术

1 webview用法 class MainActivity : ComponentActivity() {SuppressLint("SetJavaScriptEnabled")override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {NetWorkDemoTheme {// A surface container using the bac…

史上最全整合nacos单机模式整合哈哈哈哈哈

Nacos 是阿里巴巴推出的一个新开源项目&#xff0c;它主要是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos提供了一组简单易用的特性集&#xff0c;帮助用户快速实现动态服务发现、服务配置、服务元数据及流量管理。 Nacos 的关键特性包括&#x…

线程池概念、线程池的不同创建方式、线程池的拒绝策略

文章目录 &#x1f490;线程池概念以及什么是工厂模式&#x1f490;标准库中的线程池&#x1f490;什么是工厂模式&#xff1f;&#x1f490;ThreadPoolExecutor&#x1f490;模拟实现线程池 &#x1f490;线程池概念以及什么是工厂模式 线程的诞生是因为&#xff0c;频繁的创…

【Linux】Socket阻塞和非阻塞、同步与异步

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;Linux系列专栏&#xff1a;Linux基础 &#x1f525; 给大家…

20240623日志:大模型压缩-sliceGPT

context 1. 剪枝方案图释2. 正交矩阵Q 1. 剪枝方案图释 Fig. 1.1 剪枝方案 图中的阴影是表示丢弃掉这部分数据。通过引入正交矩阵 Q Q Q使 Q ⊤ Q Q Q ⊤ I \mathrm{Q}^\top\mathrm{Q}\mathrm{Q}\mathrm{Q}^\top\mathrm{I} Q⊤QQQ⊤I&#xff0c;来大量缩减 X X X的列数和 W …

[职场] 保险理赔工作简历自我评价范文 #媒体#经验分享#笔记

保险理赔工作简历自我评价范文 保险行业是指将通过契约形式集中起来的资金&#xff0c;用以补偿被保险人的经济利益业务的行业。下面是保险理赔工作简历自我评价范文&#xff0c;供大家参考。 保险公司工作自我评价1 我已在__保险公司工作_个年头。在同事和领导的热情帮忙下&…