Selenium3自动化测试【18】XPath定位元素(2)
层级与属性结合定位
如果被定为的元素,无法通过自身属性来唯一标识自己,此时可以考虑借助上级元素来定位自己。举生活中的例子,一个婴儿刚出生,还没有姓名与身份证号,此时给婴儿进行检查时往往会标注为“某某之女”。因为婴儿的母亲是确定的,找到母亲也就找到了婴儿。XPath的层级与属性结合定位就是如此。
假设bing页面的搜索框与搜索按钮元素,无法通过自身属性来定位。则可以借助其上一级(父对象)元素来定位,前端代码如图所示。

搜索框元素的上一级是1个div标签,该div标签的clalss属性等于b_searchboxForm,html代码如下:
<div class="b_searchboxForm" role="search" data-bm="15">
……
……
</div>
层级与属性结合find_element_by_xpath("//div[@class='b_searchboxForm']/input")
搜索按钮元素的上一级也是1个div标签,该div标签的id属性等于sb_go_par,该div的html代码如下:
<div id="sb_go_par" data-sbtip="搜索网页">
<input type="submit" class="b_searchboxSubmit" id="sb_form_go" tabindex="0" name="go">
</div>
层级与属性结合find_element_by_xpath("//div[@id='sb_go_par']/input")
XPath通过层级与属性结合定位元素的完整代码如下:
from selenium import webdriver
from time import sleep
driver = webdriver.Firefox()
driver.get("http://cn.bing.com/")
# 通过层级与属性的结合,定位元素
# 适用与某个元素其本身无法标识自己,需要通过其上一级来表示
driver.find_element_by_xpath("//div[@class='b_searchboxForm']/input").send_keys("bella")
driver.find_element_by_xpath("//div[@id='sb_go_par']/input").click()
sleep(1)
driver.quit()
多属性结合定位
假设某元素无法通过单一属性定位,如果该元素还有其他属性,考虑多个属性的组合来定位该元素。类似生活中的案例,假如你所在的项目小组中有两个同事都叫王强,而他们的工号则不同,姓名+工号就能够唯一的标记具体是那个同事。
假设bing页面的搜索框与搜索按钮元素,无法通过单个属性来定位,则可以多个属性结合来实现定位。
搜素框元素的html代码。
<input class="b_searchbox" id="sb_form_q" name="q" title="输入搜索词" type="search" value="" maxlength="100" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" aria-controls="sw_as" aria-autocomplete="both" aria-owns="sw_as">
搜索按钮元素的html代码
<input type="submit" class="b_searchboxSubmit" id="sb_form_go" tabindex="0" name="go">
通过多属性结合定位元素,需要通过“and”连接多个属性。
find_element_by_xpath("//input[@id='sb_form_q' and @class='b_searchbox'] ")
find_element_by_xpath("//input[@id='sb_form_go' and @class='b_searchboxSubmit']")
XPath通过多属性结合定位元素的完整代码如下:
from selenium import webdriver
from time import sleep
driver = webdriver.Firefox()
driver.get("http://cn.bing.com/")
#如果一个属性不能唯一标识某个元素,考虑多个属性组合+使用逻辑运算符
driver.find_element_by_xpath("//input[@id='sb_form_q' and @class='b_searchbox'] ").send_keys("bella")
driver.find_element_by_xpath("//input[@id='sb_form_go' and @class='b_searchboxSubmit']").click()
sleep(3)
driver.quit()
如果你觉的文章读的不过瘾,可以查看详细的视频教程。
【2021】UI自动化测试:Selenium3自动化测试
https://ke.qq.com/course/3172187?tuin=9c43f38e
【测试全系列视频课程】请点击我哦.....
地址:https://ke.qq.com/course/2525707?tuin=9c43f38e
图书京东、当当有售
京东:https://item.jd.com/12784287.html
当当:http://product.dangdang.com/29177828.html)!

Selenium3自动化测试【18】XPath定位元素(2)的更多相关文章
- Robot Framework与Web界面自动化测试学习笔记:利用xpath定位元素
在rf中,利用selinum2的关键字进行用例编写时,很多关键字的参数是html元素的定位标识. 最简单的方式,是通过id 或name来描述元素定位信息,如 click button id=l ...
- 『心善渊』Selenium3.0基础 — 6、Selenium中使用XPath定位元素
目录 1.Selenium中使用XPath查找元素 (1)XPath通过id,name,class属性定位 (2)XPath通过标签中的其他属性定位 (3)XPath层级定位 (4)XPath索引定位 ...
- 初探UiAutomator2.0中使用Xpath定位元素
J 今天的主题是讲一下在使用过程中遇到的一个问题,如何在UiAutomator2.0中使用Xpath定位元素? 背景 现在的app在打包成apk的时候都是有加固处理的,各种混淆加固,所以已经破坏了或扰 ...
- Selenium-Python学习——通过XPath定位元素
用Xpath定位元素的方法总是记不住,经常要翻出各种文档链接参考,干脆把需要用到的内容整到这个笔记中方便查找. Xpath是在XML文档中定位节点的语言.使用 XPath 的主要原因之一是当想要查找的 ...
- Selenium3+python几种定位元素的方法
学习小结: 这里使用ChromeV73+web driver 2.46 #几种定位方式: #Autotest.py from selenium import webdriver from seleni ...
- 【appium】根据xpath定位元素
1. 背景 本文尝试使用的试验对象是SDK自带的NotePad应用实例,假设已经有两个Notes分别是“note1”和“note2”添加到Notepad上面,我们要做的就是尝试用xpath的方法来定位 ...
- Python selenium PO By.XPATH定位元素报错
Python selenium PO By.XPATH定位元素报错 如下代码经常报错: # 首页的“新建投放计划”按钮 new_ads_plan = (By.XPATH, "//*[tex ...
- Xpath定位元素-一个例子
前几天在群里面解决的问题,记录下来和大家分享 需要定位这个股份制企业 方法: # 首先需要单击下拉框弹出企业性质的下拉选项:然后用过Xpath定位元素 driver.find.element_by_c ...
- Selenium3自动化测试【17】元素定位之Link定位
Link定位 find_element_by_link_text方法是通过文本链接来定位元素. 以Bing首页中顶部的[学术]链接为例,如图所示. 查看对应的html代码.从html中我们能看出这是一 ...
随机推荐
- MySQL数据库干货分享!mysql每月自动创建表结构
如果你刚好在学MySQL,博主推荐一套很详细的MySQL教程 主要详细讲解了MySQL的相关知识,包括MySQL概述,MySQL应用环境,MySQL系统特性,MySQL初学基础,MySQL管理工具,如 ...
- Java集合原理分析和知识点大杂烩(多图初学者必备!!)
一.数据结构 数据结构就是计算机存储.组织数据的方式. 在计算机科学中,算法的时间复杂度是一个函数,它定性描述了该算法的运行时间,常用O符号来表述. 时间复杂度是同一问题可用不同算法解决, ...
- CVPR2021 | 华为诺亚实验室提出Transformer in Transformer
前言: transformer用于图像方面的应用逐渐多了起来,其主要做法是将图像进行分块,形成块序列,简单地将块直接丢进transformer中.然而这样的做法忽略了块之间的内在结构信息,为此,这篇论 ...
- NetCore去注册Eureka
首先先安装nuget组件:Steeltoe.Discovery.ClientCore 然后在ConfigureServices中进行注入 services.AddDiscoveryClient(Con ...
- 【Scrapy(四)】scrapy 分页爬取以及xapth使用小技巧
scrapy 分页爬取以及xapth使用小技巧 这里以爬取www.javaquan.com为例: 1.构建出下一页的url: 很显然通过dom树,可以发现下一页所在的a标签 2.使用scrapy的 ...
- POJ1703带权并查集(距离或者异或)
题意: 有两个黑社会帮派,有n个人,他们肯定属于两个帮派中的一个,然后有两种操作 1 D a b 给出a b 两个人不属于同一个帮派 2 A a b 问a b 两个人关系 输出 同一个帮派 ...
- Windows核心编程 第十二章 纤程
第1 2章 纤 程 M i c r o s o f t公司给Wi n d o w s添加了一种纤程,以便能够非常容易地将现有的 U N I X服务器应用程序移植到Wi n d o w s中.U N I ...
- Java并发容器篇
作者:汤圆 个人博客:javalover.cc 前言 断断续续一个多月,也写了十几篇原创文章,感觉真的很不一样: 不能说技术有很大的进步,但是想法确实跟以前有所不同: 还没开始的时候,想着要学的东西太 ...
- (数据科学学习手札120)Python+Dash快速web应用开发——整合数据库
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...
- VMware 15 虚拟机黑屏问题
方法一:关闭加速3D图形 点击虚拟机,右键设置,取消勾选后,再进行重启 方法二:用管理员运行cmd 输入如下命令,要使用管理员运行,然后重启电脑 netsh winsock reset 方法三:换成V ...