层级与属性结合定位

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

    前言 在学习博客[(https://blog.csdn.net/puhaiyang/article/details/79845248)]时,注意到Flowable中的各种Service(如下),进而在 ...

  2. .Net之静态资源

    介绍 静态文件都存储在Core Web根目录中.默认目录是<content_root>/wwwroot,但可通过 UseWebRoot方法更改访问目录.而content_root是指web ...

  3. 判断post,ajax,get请求的方法

    判断post,ajax,get请求的方法 define('IS_GET',isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD'] ...

  4. 关于Spring Boot 多数据源的事务管理

    自己的一些理解:自从用了Spring Boot 以来,这近乎零配置和"约定大于配置"的设计范式用着确实爽,其实对零配置的理解是:应该说可以是零配置可以跑一个简单的项目,因为Spri ...

  5. hdu4847 水题

    题意:       你看了上面很长很长的一片英语课文之后,发现根本不用看,直接看输入输出就行了,就是给你一坨字符串,然后问你里面有几个doge(不区分大小写). 思路:       没啥说的,直接写吧 ...

  6. Python简易远控(单线程版)

    1. 技术:管道通信,流文件处理,socket基础 2. Tips: 默认IP:127.0.0.1 默认端口:7676 3. 代码样例: 服务端: #!/usr/bin/env python # en ...

  7. hdu2604 矩阵快速幂

    题意:      给你n个人,排成一个长度是n的队伍,人只有两类f,m,问可以有多少种排法使度列中不出现fff,fmf这样的子串.思路:      一开始暴力,结果超时了,其实这个题目要是能找到类似于 ...

  8. Python第四章-字典

    第四章 字典-当索引不好用时 4.0     字典可以理解成是C++里的map,可以映射任何类型.字典这种结构类型称为映射(mapping).   字典是Python中唯一内建的映射类型,字典中的值并 ...

  9. 逆向 stdio.h 函数库 fseek 函数(调试版本)

    0x01 fseek 函数 函数原型:int fseek(FILE *stream, long int offset, int whence) 函数功能:设置流 stream 的文件位置为给定的偏移 ...

  10. Python 爬虫之Scrapy框架

    Scrapy框架架构 Scrapy框架介绍: 写一个爬虫,需要做很多的事情.比如:发送网络请求.数据解析.数据存储.反反爬虫机制(更换ip代理.设置请求头等).异步请求等.这些工作如果每次都要自己从零 ...