在Selenium中使用父元素查找元素

时间:2015-11-28 10:22:07

标签: html selenium selenium-webdriver css-selectors selenium-ide

<div>
    <span>First line</span>
    <p>Second line</p>
    <span>Third line</span>
    <p>Fourth line</p>
</div>

我的要求是到达div并找到div标签的子元素。

如果我使用css选择器作为div&gt; p:nth(0)和div&gt; p:nth(1),我将分别获得第1和第2个p标签,同样也可以应用于范围。

但是有一个关键字或方法可以在达到div标签后应用,并说(0)将得到我的第一个span标记,(1)将得到我的第一个p标记,说(2)将获得我的第二个标记,(3)将获得我的第二个标记。

我没有通过css定位器或xpath定位器实现此目的的方法。如果有办法请分享。

3 个答案:

答案 0 :(得分:2)

是的,您可以获取子元素。您可以使用nth-child()选择器来实现此目的。转到div代码,然后使用nth-child()。以下是一个例子。为简单起见,我假设您的div标签有id="myId", 因此,要获得第一个span元素,请使用以下css选择器:

[id='myId'] :nth-child(1)

div#myId :nth-child(1)

#myId :nth-child(1)

适合你的情况。

注意: :nth-child(1)

之前有一个空格字符

同样,要获得第一个p元素:

div#myId :nth-child(2)

并转到第二个span元素:

div#myId :nth-child(3)

答案 1 :(得分:0)

你应该尝试使用XPath:

//div/*

这应该检索所有子元素。

答案 2 :(得分:0)

- 问题的第一个答案:您必须使用网络元素列表。 - 示例:List<WebElement> LstwebE = driver.findElements(By.xpath("//div/*"));

您可以通过这种方式使用所有元素:

LstwebE.get(0);
LstwebE.get(1);
LstwebE.get(2);
LstwebE.get(3);

LstwebE.get(0);的结果:<span>First line</span>

额外备注: - 据我所知,你想找到兄弟元素。

  • Xpath将满足此要求。

  • 首先获取元素并应用兄弟姐妹xpath:

有两种类型的兄弟姐妹:

<强> 1。前兄弟:前面的元素

获取示例代码并尝试使用此xpath作为前面的内容:

//div/p[1]/preceding-sibling::span

此xpath将找到第一个<p>标记,然后找到其前一个span标记。

xpath的结果:<span>First line</span>

<强> 2。 follow-sibling:用于以下元素

获取示例代码并尝试使用此xpath进行以下操作:

//div/p[1]//following-sibling::span

此xpath首先找到第一个<p>标记,然后转到以下范围

xpath的结果:<span>Third line</span>

  • 注意:使用div元素的唯一类或属性,例如: //div[@class='xyz']/p[1]/preceding-sibling::span