xpath定位当前元素的相邻元素/兄弟元素

【背景】

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

preceding-sibling

following-sibling

【示例】

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

 
  1. <div class="ztag201008041230345 clearfix mbox">

  2. <div class="item">

  3. <div class="item">

  4. <div class="ln ln0">

  5. <div class="ln ln2">

  6. <span class="ztag201008041230345">C</span>

  7. <span class="ztag201008041230345 fc10">(0)</span>

  8. </div>

  9. <div class="ln ln1 f-d clearfix fc10">

  10. <div class="ln ln3 clearfix">

  11. </div>

  12. <div class="item">

  13. <div class="ln ln0">

  14. <div class="ln ln2">

  15. <span class="ztag201008041230345">A</span>

  16. <span class="ztag201008041230345 fc10">(0)</span>

  17. </div>

  18. <div class="ln ln1 f-d clearfix fc10">

  19. <div class="ln ln3 clearfix">

  20. </div>

  21. <div class="item">

  22. <div class="ln ln0">

  23. <div class="ln ln2">

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

  25. <span class="ztag201008041230345 fc10">(0)</span>

  26. </div>

由页面元素结构可知:A的名称在<div class='item'>/div[@class='ln ln2']/span[text()='A']中(在div class=item的子元素的子元素中),只有<div class='item'>这一层级是相邻的,

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

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

并不相邻。

所以基本的思路是:
1. 定位出A的位置, 然后找A的祖父元素;
2. 找A的祖父元素的上一个元素和下一个元素;
3. 把上一个元素和下一个元素的孙元素定位出来,获取name的值
代码如下:

 
  1. // 获取当前相册A的前一个相册名

  2. String precedeAlbumName = driver.findElement(By.xpath("//div[@class='ln ln2']/span[text()='A']/../../preceding-sibling::div[1]/div[@class='ln ln2']/span[1]")).getText();

  3. // 获取当前相册A的后一个相册名

  4. 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]

猜你喜欢

转载自blog.csdn.net/xcyww/article/details/82737206
今日推荐