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

selenium 自动化测试——元素定位

WebDriver 提供了8种元素的定位方法,分别是:

id 定位:find_element(By.ID, "kw")

name 定位:  find_element(By.NAME, "")

tag 定位: find_element(By.TAG, "")

class 定位: find_element(By.CLASS_NAME, "")

link text 定位: find_element(By.LINK_TEXT, "")

partial link 定位: find_element(By.PARTIAL_LINK_TEXT, "")

XPath 定位: find_element(By.XPATH, "")

CSS_selector 定位: find_element(By.CSS_SELECTOR, "")

要使用这些定位方法,首先要了解页面元素的定位

了解html结构

打开一个页面,进入开发者模式,可以看到页面代码,这些html结构有下面这些特征:

1)它们由标签对组成

<html></html>

<body></body>

<div></div>

html、div是标签的标签名

2)标签有各种属性:id、name等

3)标签对之间可以有文本数据

4)标签有层级关系

<html>

        <body>

        </body>

</html>

<div>

        <form>

                <input />

        </form>

<div>

如果把input看做子标签,那么form 就是它的父标签

如何定位元素

如果把页面上的元素看做人,那么在现实世界如何找人对应的人呢?

1)首先,可以通过人本身的属性进行查找,例如他的姓名、身份证号等;对应到页面元素上就是,id、name、class name、tag name。

2)其次,可以通过他的位置进行查找,例如,xx国、xx市、xx区、xx路、xx号;对应页面元素,可以使用XPath和css通过标签层级关系的方式进行查找。

3)最后,还可以借助相关人的属性来查找某人,例如,我可以通过小明爸爸联系到小明;XPath和css同样提供了相似的定位策略来查找元素

1、id定位

HTML规定,id在HTML文档中必须是唯一的,这类似与身份证号,具有唯一性。

2、name定位

HTML规定,name用来指定元素的名称,就像人名一样

3、class定位

HTML规定,calss 用来指元素的类名,用法跟id、name一样

4、tag定位

HTML用tag来定义不同页面的元素,例如,input一般用来定义输入框,a标签用来定义超链接等

标签往往用来定义一类功能,所以一个页面中一个标签就会有很多,所以通常不会用tag来定位元素

5、link定位

link专门用来定位文本链接

6、partial link定位

partial link是link定位的一个补充,有时候文本链接比较长,就可以取部分文本进行定位,只要这个文本可以唯一标识即可

7、XPath 定位

1)绝对路径

就是参考开发者工具所展示的代码层级结构,通过标签名的层级关系来定位元素的绝对路径;如果一个层级下有多个相同的标签名,那么就按照上下顺序确定是第几个,eg div[2]表示当前层级下第2个div标签

2)利用元素属性定位

eg,//input[@id='kw']    //input表示当前某个input标签,[@id='kw'] 表示这个元素的id是kw。也可以使用name 或者 class来定位

如果不想指定具体的标签名,可以使用*代替,eg,//*[@name='wd']

当然,使用的属性也不局限于这些,元素的任意属性都可以使用,只要它能唯一标识这个元素。

3)层级与属性结合定位

如果一个元素本身没有可以唯一标识的属性值,但是它的上一级元素可以唯一标识,,那就可以通过上一级 从而找到 改元素

eg,//span[@id='s_ipt_wr']/input  含义是,找到id是s_ipt_wr的span标签,从而找到它的子标签input

4)使用逻辑运算符定位

如果一个属性无法唯一区分元素,name可以使用逻辑运算符连接多个属性条件来查找元素

eg,//input[@id='kw' and @class='s_ipt']

5)使用contains方法

contains 方法用于匹配一个属性中包含的字符串,eg,//span[contains(@class, 's_ipt_wr')]/input

6)使用text()方法

用于匹配显示文本信息,eg,通过link text 定位文字链接://a[text(),'新闻']

该方法也可以跟contains方法配合使用

8、CSS定位

css是一种语言,用来描述HTML和XML文档的表现。css使用选择器为页面元素绑定属性。css选择器可以比较灵活的选择控件的任意属性,一般情况下,css的定位速度比XPath的定位速度快。

css的常见语法:

选择器例子描述
.class.introclass选择器,选择class为intro的所有元素
#id#firstnameid选择器,选择id为firstname的所有元素
**选择所有元素
elementp选择所有标签p的元素
element>elementdiv>input选择所有父元素为div的所有input元素
element+elementdiv+input选择同一级紧接在div元素后的所有input元素
[attribute=value][target=_blank]选择所有target属性为_blank的元素

使用例如,find_element(By.CSS_SELECTOR,'.s_ipt')

也可以进行组合使用:find_element(By.CSS_SELECTOR,'form#form>span>input#kw')

相关文章:

selenium 自动化测试——元素定位

WebDriver 提供了8种元素的定位方法&#xff0c;分别是&#xff1a; id 定位&#xff1a;find_element(By.ID, "kw") name 定位: find_element(By.NAME, "") tag 定位: find_element(By.TAG, "") class 定位: find_element(By.CLASS_NAME, &quo…...

【JMeter】 二次开发插件开发 Dubbo 接口测试插件浅析

概述 在一些企业中&#xff0c;各类业务系统非常丰富&#xff0c;相互之间或对外提供很多的服务或接口这些服务或接口中&#xff0c;有很多是需要强契约约束的&#xff0c;服务的提供方、服务的使用方必须遵守相同契约这类服务最典型的就是RPC&#xff0c;其中应用广泛的有Dub…...

手机SSL证书认证失败是什么意思?

手机SSL证书认证失败是指在使用手机设备浏览网站时&#xff0c;由于SSL证书的认证问题&#xff0c;导致无法建立安全的加密连接。本文将详细介绍手机SSL证书认证失败的含义、可能的原因以及解决方法&#xff0c;帮助用户了解并解决该问题&#xff0c;以确保手机端浏览的数据传输…...

PXE网络批量装机(centos7)

目录 前言 一、实验拓扑图 二、PXE的组件 三、配置PXE装机服务器 1、设置防火墙、selinux 2.安装、启动vsftp 3、拷贝系统文件到/var/ftp用于装机 4、配置tftp 5、准备pxelinx.0文件、引导文件、内核文件 6、配置本机IP 7、配置DHCP服务 8、创建default文件 四、配…...

P1104 生日

题目描述 cjf 君想调查学校 OI 组每个同学的生日&#xff0c;并按照年龄从大到小的顺序排序。但 cjf 君最近作业很多&#xff0c;没有时间&#xff0c;所以请你帮她排序。 输入格式 输入共有 n 1 n 1 n1 行&#xff0c; 第 1 1 1 行为 OI 组总人数 n n n&#xff1b; …...

计算机网络复习大纲

第一章 计算机网络概述 一&#xff0c;网络发展的形态 了解&#xff1a;当前网络的组成形态&#xff1a; 二&#xff0c;计算机网络的定义 掌握 网络的物理组成实体 网络的工作方式 网络组建的目的 三&#xff0c;通过网络定义 我们如何学习网络 物理实体如何构成&…...

Linux:进程(概念)

学习目标 1.认识冯诺依曼系统 2.认识操作系统概念与定位 (系统调用接口) 3.理解进程的概念&#xff08;PCB&#xff09; 4.理解进程的状态&#xff08;fork创建进程&#xff0c;僵尸进程及孤儿进程&#xff09; 5.了解进程的调度&#xff08;优先级&#xff0c;竞争性&#xff…...

智能机器人:打造自动化未来的关键技术

文章目录 1. 智能机器人的基本概念2. 智能机器人的关键技术2.1 机器视觉2.2 机器学习与深度学习2.3 传感器技术 3. 智能机器人的应用领域3.1 制造业3.2 医疗保健3.3 农业3.4 服务业 4. 智能机器人的未来趋势4.1 自主决策能力的提升4.2 协作与互操作性4.3 个性化定制4.4 环境感知…...

大数据(七):Pandas的基础应用详解(四)

专栏介绍 结合自身经验和内部资料总结的Python教程,每天3-5章,最短1个月就能全方位的完成Python的学习并进行实战开发,学完了定能成为大佬!加油吧!卷起来! 全部文章请访问专栏:《Python全栈教程(0基础)》 再推荐一下最近热更的:《大厂测试高频面试题详解》 该专栏对…...

【1day】​万户协同办公平台 ezoffice未授权访问漏洞学习

注:该文章来自作者日常学习笔记,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与作者无关。 目录...

适配器模式:如何让不兼容的接口变得兼容

在软件开发中&#xff0c;我们经常会遇到这样的情况&#xff1a;我们需要使用一个现有的类或者接口&#xff0c;但它与我们系统的目标接口不兼容&#xff0c;而我们又不能修改它。这时候&#xff0c;我们该怎么办呢&#xff1f;大多数情况下我们都可以使用适配器模式来解决这个…...

sentinel熔断报java.lang.reflect.UndeclaredThrowableException

背景&#xff1a;内部要进行应用jdk&springboot升级&#xff0c;因此也需要将Spring Cloud Hystrix 替换成alibaba sentinel。 依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</a…...

工业4G路由器的户外组网与无人值守场景应用

工业4G路由器是专为不便电缆布线的工业或日晒雨淋网络不畅的户外环境所设计的网络设备。它能够在没有光纤宽带的情况下使用插卡的方式提供4G或无线WiFi的网络支持。具备工业级防水功能&#xff0c;能够在户外环境下进行网络部署&#xff0c;并实现无人值守运行。工业4G路由器还…...

中移粤港澳大湾区创新研究院、南湖研究院类脑实验室面试(部分)

中移粤港澳大湾区创新研究院 reids热key的高并发量&#xff0c;导致此redis节点的cpu使用率爆满&#xff0c;有什么优化方案&#xff1f;高并发情况下为了保证平台正常运行&#xff0c;怎么设置平台的监控和告警 南湖研究院类脑实验室 笔试通过后&#xff0c;面试无后续...

API 自动化测试难点总结与分享

API自动化测试的难点包括&#xff1a; 接口的参数组合较多&#xff0c;需要覆盖各种可能的情况。接口的状态和数据关联较多&#xff0c;需要验证返回结果是否符合预期。接口的并发访问和性能测试较为复杂&#xff0c;需要合理规划和调度测试策略。接口的安全性和权限控制较为重…...

【每日一题】补档 ABC309F - Box in Box | 三维偏序 | 树状数组 | 中等

题目内容 原题链接 给定 n n n 个箱子&#xff0c;问是否存在一个箱子 x x x 是否可以放到另一个箱子 y y y 里。 需要满足 h x < h y , w x < w y , d x < d y h_x<h_y,w_x<w_y,d_x<d_y hx​<hy​,wx​<wy​,dx​<dy​。 箱子可以随意翻转。 …...

异步编程 - 13 高性能线程间消息传递库 Disruptor

文章目录 Disruptor概述Disruptor中的核心术语Disruptor 流程图 Disruptor的特性详解基于Disruptor实现异步编程 Disruptor概述 Disruptor是一个高性能的线程间消息传递库&#xff0c;它源于LMAX对并发性、性能和非阻塞算法的研究&#xff0c;如今构成了其Exchange基础架构的核…...

(DXE_DRIVER)PciHostBridge

UEFI-PciHostBridge 1、PciHostBridge简介 PciHostBridge: 提供PCI配置空间,IO,MEM空间访问接口以及统一维护平台相关的PCI资源,提供gEfiPciHostBridgeResourceAllocationProtocolGuid,创建RootBridge等为PciBusDxe提供服务; 2、PciHostBridge 配置空间 PCI桥可管理其下PCI子…...

SpringMVC的增删改查的案例

目录 前言&#xff1a; 1.总体思路&#xff1a; 2.前期准备 3.前台页面 前言&#xff1a; 我们今天来学习研究SpringMVC的增删改查&#xff0c;希望这篇博客能够帮助正在学习&#xff0c;工作的你们&#xff01;&#xff01;&#xff01; 1.总体思路&#xff1a; 首先我们得…...

golang入门笔记——nginx

文章目录 Nginx介绍Nginx的安装Nginx文件Nginx反向代理负载均衡nginx动静分离URLRewrite防盗链nginx高可用配置安全性Nginx限流Nginx缓存集成Lua脚本OpenRestry Nginx介绍 Nginx是一个高性能的HTTP和反向代理服务器&#xff0c;特点是占用内存少&#xff0c;并发能力强&#x…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...