Selenium自动化测试-3.元素定位(2)

我们发现网站并没有id、name等属性。那么,我们可以用更高级的定位方法——xpath来定位元素。

什么是xpath?

xpath是一种在XML文档中定位元素的语言。因为HTML可以看做XML的一种实现,所以selenium用户可以使用这种强大语言在web应用中定位元素,xpath是一种路径定位的方式。

xpath扩展了上面id和name等定位方式,提供了很多种可能性。

语法格式:find_element_by_xpath()

以下,我们介绍两种xpath定位方式:前端工具定位和手写xpath。

前端工具定位元素

 1.打开Chrome浏览器开发者模式,然后定位到百度搜索框。

图片

2.定位到元素后,鼠标移至标签元素,右键后选择copy,最后选择Copy XPath,就复制了xpath路径了。

图片

3.复制xpath后,就可以用xpath定位百度搜索框了。

图片

运行之后,百度搜索框输入了小胖虎,用xpath定位成功。

手写xpath定位元素

 以下介绍怎么手写xpath。

xpath 使用路径表达式在 XML 文档中选取节点。节点是沿着路径或者 step 来选取的,下面列出了最有用的路径表达式:

图片

xpath绝对路径:

以百度搜索框为例,绝对路径如下所示。

图片

那么我们可以这样写:

find_element_by_xpath("/html/body/div/div/div/div/div/from/span/input")

图片

运行之后,打开百度页面,输入小胖虎,xpath绝对路径定位成功。

但是绝对路径定位,只要页面元素稍微改动,就会定位失败,维护成本比较高,所以并不建议使用xpath绝对定位的方式。

xpath相对定位:

1.利用属性定位

通过元素的属性定位,比如id、name、class等属性,属性匹配定位语法:“//标签名[@属性='属性值'] ",

//表示当前节点, @表示选取属性 ,标签名比如div, span等,也可用 * 表示任意标签。

以百度搜索框为例:

<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">

我们用id属性,xpath定位代码如下:

图片

其他属性如name、class等,也是相同的定位写法。

2.利用层级加属性定位

比如找不到小胖虎,可以通过先找到小胖虎的爸爸,然后找到小胖虎。

以百度搜索框为例, 我们可以找到搜索框input标签的上级标签span, 上上级标签form:

图片

我们通过上级标签span,及上上级标签form分别进行定位:

图片

运行之后,发现通过上级标签span并不能定位到搜索框,而通过上上级标签form可以定位到,所以实战要灵活运用,直到定位到元素。

3.利用逻辑运算符定位

逻辑运算符比如and ,or ,not ,多种条件组合定位。

用百度搜索框为例,使用id加name两种属性组合定位。

图片

运行之后,打开百度,输入小胖虎,id加name属性组合定位成功。

总结:节点元素无id或name属性时,可以用xpath。觉得麻烦的话可以用开发者工具直接copy,copy的xpath定位不到的,再手写xpath。xpath是定位神器,多练习, 可以解决绝大部分定位问题。

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

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

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

相关文章

Java定时调度:Timer类和TimerTask类

Java提供了多种方式来执行定时任务&#xff0c;其中使用Timer类和TimerTask类是一种简单而有效的方法。这篇教程将介绍如何使用Java的Timer类和TimerTask类来实现定时调度。 1. Timer类 Timer类用于安排指定的任务按指定的时间执行。它可以执行一次性任务&#xff0c;也可以按…

计算机网络面经-拥塞控制的乘法减小和加法增大

先说结论&#xff1a; “乘法减小”&#xff1a;无论是在慢开始阶段还是在拥塞避免阶段&#xff0c;只要发送方判断网络出现拥塞&#xff0c;就把慢开始门限ssthresh设置为出现拥塞时的发送窗口大小的一半&#xff0c;并执行慢开始算法 “加法增大”是指执行拥塞避免算法后&am…

Vue.js+SpringBoot开发衣物搭配系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 衣物档案模块2.2 衣物搭配模块2.3 衣物收藏模块 三、系统设计3.1 用例设计3.2 E-R图设计3.3 数据库设计3.3.1 衣物档案表3.3.2 衣物搭配表3.3.3 衣物收藏表 四、系统实现4.1 登录页4.2 衣物档案模块4.3 衣物搭配模块4.4…

springboot 统一结果响应,统一异常处理,统一请求参数非空校验

1、统一结果响应 1.1、ResultCodeEnum package com.nrxt.nms.mon.pt.cascade.common;import lombok.AllArgsConstructor; import lombok.Getter;AllArgsConstructor Getter public enum ResultCodeEnum {SUCCESS(200, "成功"),FAIL(500, "失败");private…

JVM相关面试题及常用命令参数

JVM常用命令和参数 常用命令&#xff1a; jps&#xff1a;查看进程及其相关信息 jmap&#xff1a;用来生成dump文件和查看堆相关的各类信息的命令 jstat&#xff1a;查看jvm运行时的状态信息 jstack&#xff1a;查看jvm线程快照的命令 jinfo&#xff1a;查看jvm参数和动态修改…

掀桌子了!20万左右的混动SUV,千万别乱选

文 | AUTO芯球 作者 | 雷歌 又掀桌子了&#xff01; 比亚迪秦PLUS掀翻了混动轿车圈的桌子后&#xff0c;又来掀混动SUV的桌子了。 而且掀桌子的还不只一家&#xff0c;比亚迪掀完奇瑞掀。 比亚迪唐DM-i以17.98万起售的价格&#xff0c;掀掉了中型混动SUV的桌子&#xff0c;…

小鹅通前端实习一面

总时长35分钟&#xff0c;自我介绍开始 1.js和c特点上的差异&#xff1b; 2.js数组去重 3.js的数据类型 4.js的引用类型和值类型的差别 5.讲一下js的网络请求 6.对前端三件套和框架的理解 7.一个html文档的结构是怎样的 8.head和body的区别 9.一个页面的加载顺序&#xff08;ht…

[数据结构初阶]队列

鼠鼠我呀&#xff0c;今天写一个基于C语言关于队列的博客&#xff0c;如果有兴趣的读者老爷可以抽空看看&#xff0c;很希望的到各位老爷观点和点评捏&#xff01; 在此今日&#xff0c;也祝各位小姐姐女生节快乐啊&#xff0c;愿笑容依旧灿烂如初阳&#xff0c;勇气与童真永不…

STM32CubeMX学习笔记16--- STM32内部FLASH

1. 内部FLASH简介 之前的文章中介绍过STM32F1利用SPI与外部FLASH&#xff08;W25QXX芯片&#xff09;通讯的例程&#xff0c;本例程将介绍STM32F1的内部FLASH&#xff0c;通过内部FLASH实现数据读写操作。 不同型号的STM32&#xff0c;其FLASH容量也有所不同&#xff0c;最小的…

nexus 简单运维

Nexus介绍 Nexus 是 Sonatype 公司发布的一款仓库&#xff08;Repository&#xff09;管理软件&#xff0c;常用来搭建 Maven 私服&#xff0c;所以也有人将 Nexus 称为“Maven仓库管理器”。 Nexus常用命令 进入安装目录 再进入bin目录 ​ cd /opt/nexus-3.13/nexus-3.13.…

webserve(6) 超时时间

双向链表实现定时器 #ifndef LST_TIMER #define LST_TIMER#include <stdio.h> #include <time.h> #include <arpa/inet.h>#define BUFFER_SIZE 64 class util_timer; // 前向声明// 用户数据结构 struct client_data {sockaddr_in address; // 客户端s…

【java】后序遍历二叉树

采用递归方式实现 节点类 public class Node {private int value;//父节点private Node fNode;//左节点private Node left;//右节点private Node right;//是否已经打印过private boolean sign false;public Node() {}public boolean isSign() {return sign;}public void setS…

未来AI发展趋势

引言 如何实现一个乌托邦式的社会呢&#xff1f;如果直接将人类社会分为两个阵营&#xff0c;一个是以旧人类为首的阵营&#xff0c;一个是以AI抚养的新人类阵营&#xff0c;其中新人类阵营的所有资源皆由旧人类阵营提供&#xff0c;且旧人类阵营的人类都经过了化学阉割无法生…

pthread_cond_wait内部逻辑

简单介绍 引入 pthread_cond_wait 函数的概念&#xff0c;它是 POSIX 线程库中用于条件变量等待的函数。一下是此函数运行时内部逻辑&#xff1a; 1. pthread_cond_wait 函数的调用过程 描述当程序调用 pthread_cond_wait 函数时会发生什么。包括将执行流放入 PCB 等待队列、解…

14:00面试,15:00就出来了,问的问题过于变态了。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到2月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…

静态时序分析:典型与非典型时序路径的约束详解(一)

相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm1001.2014.3001.5482 时序路径是静态时序分析中的一个重要概念&#xff0c;了解时序路径能帮助设计者更好地编写SDC脚本&#xff0c;本文旨在详细介绍时序路径相关内容。 首先给出时序…

深度Q网络(Deep Q-Network, DQN)

深度Q网络(Deep Q-Network, DQN)是一种结合了深度学习和强化学习的方法,用于解决序列决策问题。它是一种端到端的学习方法,可以直接从原始输入(如像素)中学习如何映射到动作值(即策略),而不需要任何手工特征工程。DQN最初由DeepMind在2015年提出,并在多款Atari 2600游…

代码随想录算法训练营day40|343. 整数拆分、96.不同的二叉搜索树

343. 整数拆分 代码随想录 视频讲解&#xff1a;动态规划&#xff0c;本题关键在于理解递推公式&#xff01;| LeetCode&#xff1a;343. 整数拆分_哔哩哔哩_bilibili 1.确定dp[i]的含义&#xff1a;正整数i拆分得到的最大乘积 2.确定递推公式&#xff1a;dp[i] max(dp[i], …

Unity角色动画变成半跪\半蹲\下沉 的问题

导入的人物动画发生如图形态 解决方法&#xff1a;找到动画模型&#xff0c;Rig - AnimationType 改为Humanoid &#xff0c;然后Apply一下

高效加载大文件(pandas+dask)

一、仅用pd加载大文件(iterator、chunksize) 要使用Pandas进行高效加载超大文件&#xff0c;我们通常会利用其内置的分块&#xff08;chunk&#xff09;处理功能。不过&#xff0c;请注意&#xff0c;Pandas本身并不支持多线程读取文件&#xff1b;它更倾向于单线程中进行块处理…