selenium 4.x 入门(环境搭建、八大元素定位)

news2024/11/24 20:55:49

背景 

Web自动化测现状

1. 属于 E2E 测试
2. 过去通过点点点
3. 好的测试,还需要记录、调试网页的细节

一、selenium4.x环境搭建

一键搭建

pip3 install webdriver-helper

安装后自动的完成:

1. 查看浏览器的版本号
2. 查询操作系统的类型
3. 根据 1 2 选择浏览器驱动版本
4. 下载浏览器区别,放在指定的目录

检查是否搭建好

from webdriver_helper import get_webdriver
driver = get_webdriver()  # 启动浏览器
driver.get("https://baidu.com")  # 控制浏览器
driver.quit()  # 关闭浏览器

二、元素定位

Selenium 提供了 8 个元素定位的 API ,可以分为三种:
1. a 标签定位策略
2. 属性定位策略
3. 通用定位策略

使用方法是一样
driver.find_element(By.ID, 'btn')
find_element 用来定位单个元素
find_elements 用来定位多个元素

1. a标签定位策略

  • LINK_TEXT :精确匹配
  • PARTIAL_LINK_TEXT :模糊匹配

 

driver.get("https://www.dangdang.com/") # 控制浏览器
# el = driver.find_element(By.LINK_TEXT, "登录") # 定位元素
el = driver.find_element(By.PARTIAL_LINK_TEXT, "登") # 定位元素
print(el.tag_name, el.text) # 打印元素的信息

2. 属性定位策略


ID
NAME
TAG_NAME
CLASS_NAME
都属于元素的属性 

 搜索框

el = driver.find_element(By.TAG_NAME, "input")
print(el.tag_name, el.text)  # 打印元素的信息
el = driver.find_element(By.ID, "key_S")
print(el.tag_name, el.text)  # 打印元素的信息
el = driver.find_element(By.NAME, "key")
print(el.tag_name, el.text)  # 打印元素的信息

3. 通用定位策略


CSS:CSS语法,不够直观
XPath :直观的层级结构


对于大部分的定位策略,其底层,是使用CSS或者XPath实现 

重点XPath

1. XPath 是一种查询语言,支持逻辑表达式和函数
2. 可以实现复杂元素的动态定位
3. 可以用于 App 自动化测试的定位
层级直观
//*[@id="key_S"]
/html/body/div[2]/div[3]/div/div[2]/form/input[1]
/html/body/div/../form

三、xpath 语法详解

1. xpath层级 

  • / (开头) 根路径
  • // 任一级
  • //div , 任意路径下的div元素
  • / (中间) 下一级
  • //div/p 任意路径下的div下的p
  • //div//p 任意路径下的div下的任意层级下的p
  • . 当前节点(同级)
  • .. 上一级
  • [n] 序号 表示同级元素的序号
  • @ 属性
//input[@name="key"]

例子-登录页面:通过 a定位 b, b是 a的两个上级的下级(父子兄弟)

//input[@type="password"]/../..//input

验证:如何验证 xpath是否正确-CSDN博客

2. xpath的函数

函数是 XPath 另一个魅力,常用函数:
  • text : 精确匹配
$x("//*[text()='孩子一读就懂的漫画儿童心理学(全5册)漫画小学生心理 为你自己读书 好习惯带来好成绩 儿童心理学情绪掌控漫画书 人际交往与性格培养绘本故事书籍​​​​​​​']")
  • contains :模糊匹配
$x('//*[contains(text(),"一读就懂")]')
  • starts-with:开头一致
$x('//*[starts-with(text(),"孩子一读")]')

  ​​​​​​​

四、复杂元素的定位和调试

按照以下几个步骤进行排查:
1. 定位表达式写对了吗?
  •     检查
2. 元素出现了吗?
  •    等待
3. 元素是否在 iframe 中?
  •   切换

 

元素在 iframe 中,就会看到,但是定位失败

 

解决办法: 定位 iframe + 切换 iframe 

 代码:

el = driver.find_element(By.ID, "***")  # 定位
driver.switch_to.frame(el)  # 切换 iframe

 

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

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

相关文章

LeetCode in Python 10. Regular Expression Matching (正则表达式匹配)

正则表达式匹配涉及到两个字符串的匹配问题,类似于寻找最大公共子串,可使用动态规划思想解决。重点和难点在于如何构建正确的状态转移方程。 示例: 图1 正则表达式匹配输入输出 代码: class Solution:def isMatch(self, s: st…

二、再识VUE-MVVM

一、初识VUE 二、再识VUE-MVVM 三、VUE数据代理 MVVM Vue.js 专注于 MVVM 模型的 ViewModel 层。它通过双向数据绑定把 View 层和 Model 层连接了起来。实际的 DOM 封装和输出格式都被抽象为了 Directives 和 Filters。 ViewModel 一个同步 Model 和 View 的对象。在 Vue.js…

计算机复试项目:SpringCloud实战高并发微服务架构设计

秒杀购物商城--环境搭建 秒杀购物商城基础服务组件--详细介绍 秒杀购物商城基础服务--权限中心 秒杀购物商城业务服务--收货地址 秒杀购物商城业务服务--秒杀活动服务 秒杀购物商城--购物车的功能设计及分析 秒杀购物商城基础服务-用户中心 秒杀购物商城业务服务--商品中…

二分查找法实例

本文是根据数据结构中常常提到的二分法而作的一篇博客,主要通过一个二分法实例进行展开说明: 实例内容 通过一个二分法函数来寻找某个数是否在给定的数组中; 代码展示 # 执行二分查找法的算法函数 # 二分法查找的对象必须是一个有序的集…

初步认识Vscode

4.26初步认识Vscode (一)快捷键的使用 1. 打开控制端 ctrl ~2. 结束终端 ctrl c3. 多行同时对齐输出 按住shift alt 光标多选4. 多行同时任意位置输出 按住alt 光标单点你想要输入的位置5. 代码太长了,想混行编辑 alt z6. 打开设置控制…

工信部CAPPVD公布24年一季度积分情况,海云安位居全国第二!

近日,工业和信息化部移动互联网APP产品安全漏洞专业库(以下简称“CAPPVD漏洞库”)根据《CAPPVD漏洞库支撑单位能力评定办法》和综合24年第一季度的漏洞报送、重要行业企事业单位漏洞加分、高危漏洞处置加分、标准支撑等,最终公布了…

剧本杀小程序开发,剧本杀行业的新发展方向

前几年,剧本杀走入了大众的视野中,并迅速呈现出了井喷式的发展态势,一度成为了年轻消费者的首选娱乐方式,吸引了大量的消费者和跻身入局的创业者。 随着互联网的发展,剧本杀在线上的发展也非常火爆。我国网民群体非常…

final原理

文章目录 1. 设置 final 变量的原理2. 获取 final 变量的原理 1. 设置 final 变量的原理 理解了 volatile 原理,再对比 final 的实现就比较简单了 public class TestFinal {final int a 20; }字节码 0: aload_0 1: invokespecial #1 // Method java/lang/Object…

数据结构与算法(Java版) | 详解十大经典排序算法之一:插入排序

接下来,我来给大家讲解第三种排序算法,即插入排序。 基本介绍 首先,我们来看下插入排序的基本介绍。 插入排序,其属内部排序法,是对于欲排序的元素以插入的方式来找寻该元素的适当位置,以便最终达到排序…

解决RTC内核驱动的问题bm8563

常用pcf-8563 , 国产平替BM8563(驱动管脚一致); 实时时钟是很常用的一个外设,通过实时时钟我们就可以知道年、月、日和时间等信息。 因此在需要记录时间的场合就需要实时时钟,可以使用专用的实时时钟芯片来完成此功能 RTC 设备驱动是一个标准…

最新版pycharm安装教程

目录 PyCharm 简介 访问 PyCharm 官网: 选择版本: 这里我们选择社区版即可 环境变量的配置 第一步 第二步 第三步 Pycharm的使用 【报错解决】 通用注意事项: PyCharm 简介 ​ PyCharm是一种Python IDE(Integrated Devel…

Facebook的声音:听见社交媒体的心跳

社交媒体如今已经成为人们日常生活中不可或缺的一部分,而Facebook作为其中的佼佼者,承载着数以亿计的用户的交流、分享和连接。在这个信息爆炸的时代,Facebook的声音就像是社交媒体的心跳,传递着无数个体的情感、思想和生活。本文…

led台灯对眼睛好不好?分享多款高品质护眼台灯

很多家长都关心孩子学习时led台灯对眼睛好不好?其实,目前的led技术已经十分成熟了,一些好的led灯基本能够做到无蓝光、频闪危害等等,不过这也不包括一些劣质的产品,因为有些有些商家为了降低成本,不惜牺牲产…

Angular中的管道(Pipe)

Angular中的管道(Pipe) 文章目录 Angular中的管道(Pipe)前言一、内置管道1. date管道格式化日期2. currency管道格式化货币3. uppercase和lowercase管道转换字符串大小写4. 小数位数5. JavaScript 对象序列化6. slice7. 管道链 二、自定义管道 前言 Angular中的管道&#xff0…

CogVLM/CogAgent环境搭建推理测试

引子 对于多模态大语言模型,一直没有怎么接触。刚巧一朋友有问到这方面的问题,也就顺手调研下。智谱AI的东西一直以来,还是很不错的。ChatGLM的忠实fans,看到白嫖网站github上有他们开源的多模态CogVLM/CogAgent,那就…

Java项目:基于SSM框架实现的实践项目管理系统(ssm+B/S架构+源码+数据库+毕业论文+开题报告)

一、项目简介 本项目是一套基于SSM框架实现的实践项目管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff…

systemserver为啥很少同步跨进程调用app/DeadSystemException相关问题分析套路

背景: 有学员分享了一个问题,说monkey测试过程中有一系列问题属于同类的,具体看如下截图: 可以看到这里的有很多应用都进行了crash,而且crash原因居然都是写着 DeadSystemException: The system died; earlier logs …

《Redis使用手册之散列》

《Redis使用手册之散列》 **《Redis使用手册之散列》****散列简介****HSET:为字段设置值****HSETNX:只在字段不存在的情况下为它设置值****HGET:获取字段的值****HINCRBY:对字段存储的整数值执行加法或减法操作****HINCRBYFLOAT&a…

基于飞腾D2000全国产化高速公路一体化收费站解决方案:站数据服务器、站AI服务器、收费系统、监控系统

高速公路一体化收费站解决方案 行业 交通工程及沿路设施作为公路的一个重要组成部分,对城市互联和城市发展具有重要意义,因此围绕高速公路的专用收费 站设计和建设,将有效促进枢纽集散系统与高速公路连通,显著提升城市高速集散能…

Flexible布局在Web前端开发中的实际应用

随着Web前端技术的不断发展,Flexible布局(弹性布局)已成为现代网页设计中不可或缺的一部分。它提供了一种高效、灵活的方式来组织和管理页面元素,使开发者能够轻松应对各种复杂的布局需求。本文将通过一个实际的应用案例来介绍Fle…