层级与属性结合定位

如果被定为的元素,无法通过自身属性来唯一标识自己,此时可以考虑借助上级元素来定位自己。举生活中的例子,一个婴儿刚出生,还没有姓名与身份证号,此时给婴儿进行检查时往往会标注为“某某之女”。因为婴儿的母亲是确定的,找到母亲也就找到了婴儿。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)的更多相关文章

  1. Robot Framework与Web界面自动化测试学习笔记:利用xpath定位元素

    在rf中,利用selinum2的关键字进行用例编写时,很多关键字的参数是html元素的定位标识. 最简单的方式,是通过id 或name来描述元素定位信息,如 click  button    id=l ...

  2. 『心善渊』Selenium3.0基础 — 6、Selenium中使用XPath定位元素

    目录 1.Selenium中使用XPath查找元素 (1)XPath通过id,name,class属性定位 (2)XPath通过标签中的其他属性定位 (3)XPath层级定位 (4)XPath索引定位 ...

  3. 初探UiAutomator2.0中使用Xpath定位元素

    J 今天的主题是讲一下在使用过程中遇到的一个问题,如何在UiAutomator2.0中使用Xpath定位元素? 背景 现在的app在打包成apk的时候都是有加固处理的,各种混淆加固,所以已经破坏了或扰 ...

  4. Selenium-Python学习——通过XPath定位元素

    用Xpath定位元素的方法总是记不住,经常要翻出各种文档链接参考,干脆把需要用到的内容整到这个笔记中方便查找. Xpath是在XML文档中定位节点的语言.使用 XPath 的主要原因之一是当想要查找的 ...

  5. Selenium3+python几种定位元素的方法

    学习小结: 这里使用ChromeV73+web driver 2.46 #几种定位方式: #Autotest.py from selenium import webdriver from seleni ...

  6. 【appium】根据xpath定位元素

    1. 背景 本文尝试使用的试验对象是SDK自带的NotePad应用实例,假设已经有两个Notes分别是“note1”和“note2”添加到Notepad上面,我们要做的就是尝试用xpath的方法来定位 ...

  7. Python selenium PO By.XPATH定位元素报错

    Python selenium PO  By.XPATH定位元素报错 如下代码经常报错: # 首页的“新建投放计划”按钮 new_ads_plan = (By.XPATH, "//*[tex ...

  8. Xpath定位元素-一个例子

    前几天在群里面解决的问题,记录下来和大家分享 需要定位这个股份制企业 方法: # 首先需要单击下拉框弹出企业性质的下拉选项:然后用过Xpath定位元素 driver.find.element_by_c ...

  9. Selenium3自动化测试【17】元素定位之Link定位

    Link定位 find_element_by_link_text方法是通过文本链接来定位元素. 以Bing首页中顶部的[学术]链接为例,如图所示. 查看对应的html代码.从html中我们能看出这是一 ...

随机推荐

  1. HUAWEI AppGallery Connect获得SOC国际权威认证,多举措保护信息和隐私安全

    近日,华为应用市场AppGallery Connect(简称AGC)一次性成功通过国际权威标准组织"美国注册会计师协会(AICPA)"认定的SOC1 Type2.SOC2 Type ...

  2. JDK8新特性(一) Lambda表达式及相关特性

    函数式接口 函数式接口是1.8中的新特性,他不属于新语法,更像是一种规范 面向对象接口复习 在这里先回顾一下面向对象的接口,创建接口的关键字为interface,这里创建一个日志接口: public ...

  3. text-align: justify 文本对齐

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 【VritualEnv】虚拟环境的介绍和基本使用

    一.virtualenv的介绍: 在python开发中,我们可能会遇到一种情况,就是当前的项目依赖的是某一个版本,但是另一个项目依赖的是另一个版本,这样就会造成依赖冲突,而virtualenv就是解决 ...

  5. thinkPHP5中的与原本的字母方法用什么东西替代了?

    过去的单字母函数已完全被替换掉,如下:S=>cache,C=>config,M/D=>model,U=>url,I=>input,E=>exception,L=&g ...

  6. UVA11389巴士司机问题

    题意:       有n个巴士司机,然后有2n个活,其中有n个是上午,n个是下午,每个自己都要选择一个上午的和一个下午的,每个活都有驾驶距离,如果一个司机每天的驾驶距离大于d,那么超出的部分就要每个单 ...

  7. 分解uber依赖注入库dig-源码分析

    上一篇帖子 分解uber依赖注入库dig-使用篇 把如何使用dig进行代码示例说明,这篇帖子分析dig的源码,看他是如何实现依赖注入的. dig实现的中心思想:所有传入Provide的函数必须要有除e ...

  8. 【译】N 皇后问题 – 构造法原理与证明 时间复杂度O(1)

    [原] E.J.Hoffman; J.C.Loessi; R.C.Moore The Johns Hopkins University Applied Physics Laboratory *[译]* ...

  9. Junit单元测试&反射&注解

    内容索引 1. Junit单元测试 2. 反射 3. 注解 Junit单元测试: * 测试分类: 1. 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值. 2. 白盒测试:需要写代码的.关 ...

  10. [2021BUAA软工助教]个人第一次阅读作业小结

    BUAA个人阅读作业小结 一.作业要求 https://edu.cnblogs.com/campus/buaa/BUAA_SE_2021_LR/homework/11776 二.评分规则 言之有物,按 ...