3-UI自动化-八大元素定位,xpath定位方式和相关的常问面试题

news2025/1/18 20:12:08

3-UI自动化-八大元素定位,xpath定位方式和相关的常问面试题

  • 八大元素定位
  • 八大元素定位的使用
  • 通过xpath定位
    • xpath语法
    • 1. xpath逻辑运算定位
    • 2. 层级条件定位
    • 3. 索引定位
    • 4. 文本定位text()
  • WebElement对象
    • WebElement对象常用属性
    • WebElement对象常用方法
    • find_element()和 find_elements()的区别?
  • 出现报错,提示无法定位元素,可能的原因可能有哪些?

♡ \color{red}{\heartsuit}
上篇我们了解了HTML页面的结构和常用的标签和属性,介绍2-UI自动化-HTML页面的构成和常见标签、属性。小白的话建议先看看,再来学习八大元素定位。

UI自动化面试基本上逃不了这道面试题。八大元素定位。

八大元素定位

  1. 通过id属性
  2. 通过class属性,注意,表达式中间不能有空格
  3. name属性
  4. xpath(不是属性,表达式中间可以有空格)
  5. css选择器(不是属性)
  6. link_text属性,文本定位
  7. partial_link_text属性,也是文本定位,模糊的
  8. tagName(在UI自动化较少用,了解即可)
from selenium import webdriver
from selenium.webdriver.common.by import By

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

# 面试题:八大定位元素的方式
driver.find_element(By.CLASS_NAME, "")
driver.find_element(By.ID, "")
driver.find_element('id', '')
driver.find_element(By.NAME, "")
driver.find_element(By.XPATH, "")
driver.find_element(By.CSS_SELECTOR)
driver.find_element(By.LINK_TEXT)
driver.find_element(By.PARTIAL_LINK_TEXT)
driver.find_element(By.TAG_NAME)

看到有些文章是这种写法,在pycharm编辑,为什么这些会有特殊颜色显示?
在这里插入图片描述
因为selenium官方不推荐这种写法,以后这种写法可能会废弃,不建议童鞋这么写。
正确的应该是这么写driver.find_element(By.ID, "元素定位表达式")
这种也是可以的driver.find_element('id', ''),可以看下By类的源码,其实是等价的,都是By类的类属性。

在这里插入图片描述
个人比较喜欢通过By.的方式来定位元素,因为在pycharm编辑器,输入.时就会有提示,如果自己写’id’,'link text’是没有提示的,如果你很熟练记住,也可以用这种方式。

在这里插入图片描述

知道了八大元素,还要知道如何使用。

八大元素定位的使用

拿最熟悉的百度举例子,。平常我们用百度搜索,是不是先输入要搜索的关键词,点击百度一下。就以这个场景来演示下元素定位。

首先找到输入百度url
然后定位到搜索框,输入要搜索的关键词,f12,或者在搜索框点击鼠标右键,点击–>检查,在elements可以看到元素,可以发现这个搜索框有id,class,那么可以通过id,name,class_name等来定位,也可以通过XPATH,这里就用id来定位,因为它是唯一的。不知道属性标签的,记得去看这篇–>

在这里插入图片描述

接下来输入搜索关键词之后是不是就要回车(点击百度一下)。
定位百度一下的元素,可以通过id来定位。
在这里插入图片描述
代码如下

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

driver = webdriver.Chrome()
# 窗口最大化
driver.maximize_window()
driver.get('http://www.baidu.com')
elem = driver.find_element(By.ID, 'kw')
print(elem)
# 输入要搜索的词
elem.send_keys('百度网盘')
# 定位到百度一下
search = driver.find_element(By.ID, 'su')
# 点击百度一下,提交
search.submit()
print(driver.title)

运行后打印出浏览器的标题
在这里插入图片描述

如果通过class_name定位,应该怎么写?把上述By.ID,换成By.CLASS_NAME的表达式就可以了吗?

# elem = driver.find_element(By.ID, 'kw')
elem = driver.find_element(By.CLASS_NAME, 's_ipt nobg_s_fm_hover')

实际上,这里有个坑。对于class属性的,能不用尽量不用,特别是元素中有空格时,这里百度的class属性,'s_ipt nobg_s_fm_hover’就有空格,运行就会报错。定位不到,这是selenium的一个坑,所以,大家要注意,如果遇到有空格的,不要用class定位。找其他的定位方式,总是能解决的。

在这里插入图片描述

通过name定位

# elem = driver.find_element(By.ID, 'kw')
elem = driver.find_element(By.NAME, 'wd')

其他方式差不多,不一一介绍了,重点讲解XPATH的使用

通过xpath定位

如果一个元素id、name、class属性都没有,这时候也可以通过其它属性定位到,这里我用百度的举例(虽然它有id属性)。
f12打开控制台,找到elements,按ctrl+f,就会出入搜索框,在这个搜索框调试我们的xpath表达式是否正确且唯一,这里的xpath表达式就可以写为//input[@id='kw']
在这里插入图片描述

xpath语法

表达式作用
nodename标签名,选取此层级节点下的所有子节点
/代表从根节点进行选取
//可以理解为匹配,就是在所有节点中选取此节点,直到匹配为止
.选取当前节点
选取当前节点上一层(上一级目录)
@表示要选取的属性(也是匹配)
  • 不想指定标签名称,可以用*号表示任意标签,//*[@id='kw']
  • 指定某个标签,//input[@id='kw']

1. xpath逻辑运算定位

可以支持与(and)、或(or)、非(not),常用的是and组合条件定位。
比如查找id=kw并且name=wd的//input[@id='kw' and name='wd']

2. 层级条件定位

如果一个元素,它的属性不是很明显,无法直接定位到,这时候我们可以先找它的父元素,找到父元素后,再找下个层级就能定位到了
如百度的定位,要定位的是input这个标签,它的父元素的id=s_kw_wrap.//*[@id="s_kw_wrap"]/input
要是父元素的属性也不是很明显,就找祖先id=form,就可以通过层级关系定位到,we= driver.find_element(By.XPATH,'//form[@id="form"]/span/input')
在这里插入图片描述

3. 索引定位

​如果一个元素它的兄弟元素跟它的标签一样,这时候无法通过层级定位到。因为都是一个父亲生的,多胞胎兄弟。比如百度热搜一栏。
如果这样定位//a[1][@id='title-content'],有10条记录,10个兄弟之间每个id属性都是一样的,那么如何定位?

在这里插入图片描述

借助索引,(//a[1][@id='title-content'])[1]我们就能准确定位到。
在这里插入图片描述

注意!索引是从1开始的,不是从0!!
另外,注意要加括号,把xpath定位的括起来,没有括号,定位到的还是10条。

上面的chroPath插件给我们写的就是文本定位的方式,但是如果放在实际业务中,这是不适用的,每天的时事都在变化,通过文本定位脚本都得天天改。所以,学习XPATH定位是有必要的,插件不是万能,不能过度依赖。

但是我们还是要学下文本定位,在一些场景,文本定位还是可用的。

4. 文本定位text()

在这里插入图片描述

这里通过text文本定位,表达式为//a[text()="图片"]
在这里插入图片描述
文本定位经常和contains一起使用,模糊匹配,从字面就能知道是包含文本,有些文本内容可能过长,只需要包含特定的即可。

WebElement对象

上面的代码中,定位元素用了一个变量来接收elem = driver.find_element(By.NAME, 'wd'),实际上elem是WebElements的对象,既然是对象,那么就有属性和方法,那么WebElements对象的属性和方法有哪些呢?

在pycharm编辑器中可以通过elem.就会自动显示有哪些属性和方法。

在这里插入图片描述
可以看到它有send_keys()方法,click()点击方法,clear()清空方法,有text属性,tag_name属性……可以自己看下源码,这里就不贴了,源码太长了。

WebElement对象常用属性

  • tag_name获取标签名
  • text文本属性

WebElement对象常用方法

  • 元素对象.click() 点击
  • send_keys() 输入
  • submit()提交
  • clear()清空输入框
  • get_attribute()获取元素的属性

♡ \color{red}{\heartsuit}

find_element()和 find_elements()的区别?

这是可能会问到的面试题。

1、find_element()得到的是一个WebElement对象,find_elements()得到的是一个WebElement对象列表

如果通过表达式能找到多个元素时,通过find_element()只会返回查找到的第一个元素,通过find_elements()就会返回所有元素,存放到列表。

2、如果通过表达式找不到元素时,通过find_element()找不到元素,就会报错NoSuchElementException;通过find_elements()找不到元素时不会报错,会返回一个空列表

当想通过某个表达式能不能找到元素时,也就是说页面中是否存在某个元素,该如何写?

# 方法一
if driver.find_elements(By.NAME, 'wd'):
    # []
    print("元素存在")
else:
    print("元素不存在")
# 方法二
try:
    driver.find_element(By.NAME, 'wd')
    print("元素存在")
except:
    print("元素不存在")

出现报错,提示无法定位元素,可能的原因可能有哪些?

这也是一道常问的面试题。
思路如下

  • 1、元素定位表达式有没有正确,如何确定?在浏览器中,按ctrl+f,输入表达式看能不能找到元素,找到的元素是否唯一?
  • 2、如果元素表达式正确,检查是否有设置等待。(隐式等待,显式sleep)
  • 3、定位的元素是否在另一个窗口(driver.window_handles )
  • 4、iframe 在不在 iframe 当中
  • 5、定位的元素是否会动态变化(可能是表达式中存在变化的因子,比如上面的百度热搜,如果用文本定位,热搜是每天变化的 )

下篇介绍4-UI自动化-selenium三大等待方式

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

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

相关文章

【Mybatis编程:插入和根据id删除相册数据】

目录 1. Mybatis编程&#xff1a;插入相册数据 2. Mybatis编程&#xff1a;根据id删除相册数据 1. Mybatis编程&#xff1a;插入相册数据 当某个数据表中的id被设计为“自动编号”的&#xff08;auto_increment&#xff09;&#xff0c;在配置<insert>标签时&#xff0…

开心公寓房屋出租管理系统的设计与实现(系统源码+技术文档+论文)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

基于51单片机病房呼叫系统(64位病床)

资料编号&#xff1a;189 下面是仿真演示&#xff1a; 189-基于51单片机病房呼叫系统&#xff08;64位病床&#xff09;&#xff08;仿真源程序原理图全套资料&#xff09;功能介绍&#xff1a; 设计一个可容64张床位的比那个房呼叫系统。 1、每个床位都有一个按钮&#xf…

InnoDB存储引擎简介

InnoDB存储引擎是一种兼顾高可靠性和高性能的通用存储引擎&#xff0c;在MySQL5.5之后&#xff0c;被选为MySQL的默认存储引擎 InnoDB的特点 1 DML操作循环ACID模型&#xff0c;支持事务 这里就印出了我们之前的知识点 DML操作就是我们对数据进行 增删除查改操作 ACID分别代表…

HTML小游戏14 —— H5横版冒险游戏《无限生机》(附完整源码)

&#x1f482; 网站推荐:【神级源码资源网】【摸鱼小游戏】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 想寻找共同学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】&#x1f4ac; 免费且实用的计…

[ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(三)CSRF相关面试题

​ &#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成…

Azure CDN

Azure CDN Azure CDN 是服务器的分发网络&#xff0c;可以将网页内容更高效地分发给终端用户。 CDN在POP点的边缘服务器缓存内容&#xff0c;这样更临近终端用户&#xff0c;延迟低。 Azure CDN 给开发者提供全球解决方案&#xff0c;能够将内容放在全球各个节点&#xff0c;提…

MotoSimEG-VRC软件:龙门架外部设备添加以及示教编程与仿真运行

目录 概述 龙门架添加与属性配置 龙门架软限位设定 龙门架示教编程 仿真运行 概述 龙门架是工业生产中十分常见的自动化设备&#xff0c;由于其具备三维空间内的多自由度运动特性&#xff0c;通常被作为堆垛机&#xff0c;广泛应用在仓储物流领域。也可以作为直角坐标机器…

如何通过 Hardhat 来验证智能合约

在很大程度上&#xff0c;由于部署到通用区块链的智能合约的不变性&#xff0c;安全始终是用户和企业的首要任务。因此&#xff0c;在以太坊上开发智能合约的关键步骤之一是初始部署后的 Etherscan 验证。Etherscan 使任何人&#xff0c;从用户到经验丰富的开发人员和 bug hunt…

计算机组成原理课程设计(1)

指令设计 计算机组成原理课程设计 1、完成以下9条指令的设计&#xff1a; LDI Rd,#data&#xff0c;LDA Rd,adr&#xff0c;STA adr,Rs&#xff0c;LDR Rd,Rs&#xff0c;ADD Rd,Rs&#xff0c;XOR Rd,Rs&#xff0c;JMP adr&#xff0c;JZ adr&#xff0c;HALT 2.指令设计 …

全球著名漫画家蔡志忠创作的“EIS元宇宙之门”数字艺术品限量发售!11.29正式开售

开启宇宙之门 2022年12月3日&#xff0c;EIS我们将一起迎接一个新的爆发机会——品牌将正式接轨元宇宙一个全新的营销时代即将来临&#xff01;首次集结千位元宇宙领域品牌营销头号玩家&#xff0c;找到通往元宇宙智慧的不二法门&#xff01; 品牌营销领域一次全新的风向标&am…

SPARK数据分析

有了 DataFrame 之后&#xff0c;我们该如何在 DataFrame 之上做数据探索、数据分析&#xff0c;以及各式各样的数据转换呢&#xff1f;在数据处理完毕之后&#xff0c;我们又该如何做数据展示与数据持久化呢&#xff1f;今天这一讲&#xff0c;我们就来解答这些疑问。 为了给开…

[附源码]计算机毕业设计springboot创新创业管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

操作系统01_进程管理_---软考高级系统架构师006

操作系统的考点;可以看到这里有进程管理 2.存储管理 3.设备管理 4.文件管理 其中比较重要的是进程管理&#xff0c;进程管理中的进程三态图,前趋图,同步与互斥,PV操作,死锁,线程,这个地方考的比较多 ---------------------- 进程的组成: 进程控制块PCB,是进程的唯一标志 T…

阿里云服务器公网带宽计费模式:固定带宽和按使用流量详解

阿里云服务器公网带宽计费模式按固定带宽和按使用流量哪个划算&#xff1f;按固定带宽计费1M带宽一个月23元&#xff0c;按使用流量计费1GB流量0.8元&#xff0c;如果云服务器带宽使用率低于10%&#xff0c;那么首选按使用流量计费&#xff0c;如果带宽实际利用率较高的话&…

自学软件测试必备的英文单词【1500道加语法】

电脑专业英语1500词《电脑专业英语》 1. file n.文件&#xff1b;v.保存文件 2. command n.命令&#xff0c;指令 3. use v.使用&#xff0c;用途 4. program n.程序 5. line n. (数据&#xff0c;程序)行&#xff0c;线路 6. if conj.如果 7. display vt.显示&#xff…

5. 虚拟化特性介绍

5.1 通用虚拟化特性 虚拟化集群特性&#xff08;1&#xff09; 集群&#xff08;cluster&#xff09;&#xff1a;单纯地从集群的角度或用途来说&#xff0c;集群属于网格计算。大家把各自的资源&#xff08;如&#xff1a;服务器提供了自己的计算资源、网络资源、存储资源&am…

BUUCTF Misc 来首歌吧 荷兰宽带数据泄露 面具下的flag 九连环

来首歌吧 下载文件 使用Audacity打开 可以发现框出来的一串,放大查看 有长有短有空格&#xff0c;大概率是摩斯密码 ...../-.../-.-./----./..---/...../-..../....-/----./-.-./-.../-----/.----/---../---../..-./...../..---/./-..../.----/--.../-../--.../-----/----./.…

unity资源管理之Addressable

unity自带了AssetsBundle的机制&#xff0c;Addressable是在AssetsBundle的机制上封装了一下。 主要做了以下封装&#xff1a; 1.编辑器&#xff1a;根据项目需求,编写编辑器扩展,提供指定资源打入对应bundle包的策略; 2.可以自主加载和释放资源&#xff1a;根据项目的需求,…

【MySQL】数据库服务器硬件优化与实战详解(调优篇)(实战篇)(MySQL专栏启动)

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;专注于研究 Java/ Liunx内核/ C及汇编/计算机底层原理/源码&#xff0c;就职于大型金融公司后端高级工程师&#xff0c;擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 &#x1…