selenium中,用xpath定位当前元素的相邻元素/兄弟元素
2017-09-02 13:15
585 查看
【背景】
在定位页面元素时,有时候需要根据某个元素特征,去定位其相邻元素/兄弟元素,或者定位其父元素的兄弟元素(或叔伯元素的子元素)。这里引入xpath的两个定位方法:
preceding-sibling
following-sibling
【示例】
如图,页面元素A,B,C,假设我不知道B和C的name,只知道A的name,我想根据A的name去其上一个元素的name和下一个元素的name,
由页面元素结构可知: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的值
代码如下:
// 获取当前相册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的用法也是如此。
【总结】
相邻元素定位,
前一位:<
4000
br />
preceding-sibling::div[1]
后一位:
following-sibling::div[1]
前N位:
preceding-sibling::div
后N位:
following-sibling::div
在定位页面元素时,有时候需要根据某个元素特征,去定位其相邻元素/兄弟元素,或者定位其父元素的兄弟元素(或叔伯元素的子元素)。这里引入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='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的值
代码如下:
// 获取当前相册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的用法也是如此。
【总结】
相邻元素定位,
前一位:<
4000
br />
preceding-sibling::div[1]
后一位:
following-sibling::div[1]
前N位:
preceding-sibling::div
后N位:
following-sibling::div
相关文章推荐
- 【selenium webdriver】 XPath 多条件查询语句(处理同一个页面上出现相同文本按钮的动态ID元素定位)
- Selenium怎样利用Xpath定位元素
- selenium —— 父子、兄弟、相邻节点定位方式详解
- 在Selenium WebDriver中使用By.Xpath快速定位页面元素
- Selenium自动化 元素定位(Xpath和CSS)
- Selenium2学习-002-Selenium2 Web 元素定位及 XPath 编写演示示例
- Selenium使用Xpath定位元素及实例(1)
- Selenium 元素定位 CSS and XPath
- Python+Selenium的元素定位方法(xpath)
- selenium元素定位之XPath
- 在Selenium WebDriver中使用By.Xpath快速定位页面元素
- Python selenium 父子、兄弟、相邻节点定位方式详解
- selenium定位页面元素时xpath定位技巧(一)
- Python selenium —— 父子、兄弟、相邻节点定位方式详解
- Python selenium父子、兄弟、相邻节点定位
- selenium-2 使用xpath定位元素
- Selenium使用Xpath定位元素及实例(2)
- selenium webdriver xpath 定位页面元素
- selenium中根据父子、兄弟、相邻节点定位
- 两份关于 selenium/xpath 元素定位的极品 pdf,同样适用于移动测试