【背景】

在定位页面元素时,有时候需要根据某个元素特征,去定位其相邻元素/兄弟元素,或者定位其父元素的兄弟元素(或叔伯元素的子元素)。这里引入xpath的两个定位方法:

preceding-sibling

following-sibling

【示例】

如图,页面元素A,B,C,假设我不知道B和C的name,只知道A的name,我想根据A的name去其上一个元素的name和下一个元素的name,

<div class="ztag201008041230345 clearfix mbox">
<div class="item">
<div class="item">
<div class="ln ln0">
<div class="ln ln2">
<span class="ztag201008041230345">C</span>
<span class="ztag201008041230345 fc10">(0)</span>
</div>
<div class="ln ln1 f-d clearfix fc10">
<div class="ln ln3 clearfix">
</div>
<div class="item">
<div class="ln ln0">
<div class="ln ln2">
<span class="ztag201008041230345">A</span>
<span class="ztag201008041230345 fc10">(0)</span>
</div>
<div class="ln ln1 f-d clearfix fc10">
<div class="ln ln3 clearfix">
</div>
<div class="item">
<div class="ln ln0">
<div class="ln ln2">
<span class="ztag201008041230345">B</span>
<span class="ztag201008041230345 fc10">(0)</span>
</div>

由页面元素结构可知:A的名称在

/div[@class=‘ln ln2’]/span[text()=‘A’]中(在div class=item的子元素的子元素中),只有

这一层级是相邻的,
<span class="ztag201008041230345">A</span>

<span class="ztag201008041230345">B</span>

并不相邻。

所以基本的思路是:

  1. 定位出A的位置, 然后找A的祖父元素;
  2. 找A的祖父元素的上一个元素和下一个元素;
  3. 把上一个元素和下一个元素的孙元素定位出来,获取name的值
    代码如下:
//   获取当前相册A的前一个相册名
String precedeAlbumName = driver.findElement(By.xpath("//div[@class='ln ln2']/span[text()='A']/../../preceding-sibling::div[1]/div[@class='ln ln2']/span[1]")).getText();
//  获取当前相册A的后一个相册名
String followAlbumName = driver.findElement(By.xpath("//div[@class='ln ln2']/span[text()='A']/../../following-sibling::div[1]/div[@class='ln ln2']/span[1]")).getText();

其中
preceding-sibling::div[1]
的[1]表示第一位,如果要定位往前第二个,那么就是[2],以此类推,following-sibling的用法也是如此。

【总结】
相邻元素定位,
前一位:
preceding-sibling::div[1]
后一位:
following-sibling::div[1]

前N位:
preceding-sibling::div[N]
后N位:
following-sibling::div[N]

selenium中,用xpath定位当前元素的相邻元素/兄弟元素相关推荐

  1. python 地址模糊匹配_使用python处理selenium中的xpath定位元素的模糊匹配问题

    # 用contains,寻找页面中style属性值包含有sp.gif这个关键字的所有div元素,其中@后面可以跟该元素任意的属性名. self.driver.find_element_by_xpath ...

  2. selenium查找文本_在Selenium中查找具有链接文本和部分链接文本的元素

    selenium查找文本 Selenium中CSS定位器是一个基本概念,每个旨在使用Selenium执行自动化测试的测试人员都应该意识到这一点. 在Selenium中充分使用CSS定位器可以帮助您以更 ...

  3. 兄弟选择器——用于选择除第一个元素外的其他兄弟元素

    兄弟选择器--用于选择除第一个元素外的其他兄弟元素 兄弟选择器是CSS选择器中的一种,如 div.bar + ul表示:选择类名为bar的div的为ul的兄弟元素,我们可以用它来选择除第一个元素外的其 ...

  4. Jsoup如何获得某元素后面的所有兄弟元素

    最近在做简单的爬数据项目,老是遇到要获得某个元素后面的所有兄弟元素都被卡住了,查了JSOUP文档(http://www.open-open.com/jsoup/selector-syntax.htm) ...

  5. 在Selenium中按TagName定位元素

    Selenium定位器是处理网页上的元素时的关键. 从ID,名称,类,标记名,XPath,CSS选择器等定位器列表中,可以根据需要选择其中任何一种,然后在网页上找到Web元素. 由于与tagName或 ...

  6. Selenium webdriver中的xpath定位

    使用selenium进行自动化测试,其实很多时候就是模拟用户的操作,在前端页面对元素进行操作,因此元素的定位在自动化测试中是至关重要的.关于如何 使用id,className,name,linkTex ...

  7. pythonxpath定位_python+selenium基础之XPATH定位

    selenium定位元素的方法有很多种,像是通过id.name.class_name.tag_name.link_text等等,但是这些方法局限性太大,拿id属性来说,首先一定不会每个元素都有id属性 ...

  8. java中常用的定位方式有哪些_java-selenium八种元素定位方式

    一.ID定位 一般情况下页面元素的id属性在当前网页中是唯一的所以使用ID定位可以保证定位的唯一性,不会像其他定位方式一样可能定位到多个页面元素.但有的网页页面元素没有id属性值,导致无法使用ID定位 ...

  9. js 兼容性封装获取第一个子元素,最后一个子元素,下一个兄弟元素,上一个兄弟元素

    高级浏览器: chrome firefox ie9及以上符合web标准浏览器. 低版本浏览器: ie6,ie7,ie8. 节点和元素的适用范围:以firstChild和firstElementChil ...

  10. vue点击当前元素添加class 删除兄弟元素的class

    在vue中当我们要实现点击元素动态添加类名时,我们不能像JQ那样去用(xxx.addClass('class').siblings().removeClass('class'))实现,那我们应该怎样去 ...

最新文章

  1. Serverless 技术选型
  2. 微服务发现组件Eureka:微服务注册
  3. Git入门教程(一)
  4. 正则表达式匹配中文字符串的文章URL
  5. Stupid cat Doge (分形图)
  6. sql server (mssqlserver)无法启动,事件查看器提示SQL Server 无法生成 FRunCM 线程
  7. 为什么代码规范要求SQL语句不要过多的join?
  8. 案例:演示JDBC的使用
  9. 如何使用 DNSMAQ 搭建 DNS 服务器?
  10. SAP ABAP第一,两,三代出口型BADI实现 解释的概念
  11. 使用 vsftpd 服务传输文件
  12. python 第一行 报错_解决python的空格和tab混淆而报错的问题
  13. 计算机网络七层结构与功能,网络七层结构介绍
  14. 操作系统中ESP和MSR分区
  15. html的android开发工具,只会html也可以做安卓app(附实例)
  16. 硕正插件安装不上(重置之后还不行)
  17. 苹果电脑带有双系统Mac/Win,如何更改默认启动系统?
  18. SOP SO SOIC TSSOP SSOP 封装直观比较图 [转载]
  19. python语言关键字的是_不属于Python语言关键字的是( )
  20. JSD-2204-RESTful-Service-SpringMVC-Day06

热门文章

  1. “华为”和“荣耀”的区别总结,双品牌战略一文解读
  2. KNIME二次开发之环境搭建
  3. 微信小程序分享html页面
  4. 布衣,“我只想看到你眼中的倔强”
  5. mmo架构_如何使用MMO或MOBA鼠标提高生产力
  6. Redis服务器搭建
  7. 《oracle数据库》总结
  8. 计算机视觉:图片缩放
  9. Odoo性能优化实战
  10. delay 芯片时序output_综合和静态时序分析