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

Finding the elements using parent in Selenium

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

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

如果我将 css 选择器用作 div>p:nth(0) 和 div>p:nth(1),我将获得第一个和第二个 p 标签分别,同样可以应用于跨度。

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

我不知道有什么方法可以通过 css 定位器或 xpath 定位器来实现。如果有办法请分享。

你应该用 XPath 试试:

//div/*

这应该会为您检索所有子元素。

是的,您可以获取子元素。您可以使用 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)

前有一个 space 字符

同样,要到达第一个 p 元素:

div#myId :nth-child(2)

并到达第二个 span 元素:

div#myId :nth-child(3)

等等

- 您问题的第一个答案:您必须使用网络元素列表。 - 示例: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. preceding-sibling : 对于前面的元素

使用您的示例代码并在前面尝试使用此 xpath :

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

此 xpath 将首先找到 <p> 标签,然后找到它前面的 span 标签。

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

2。 following-sibling : 对于以下元素

使用您的示例代码并尝试以下 xpath:

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

这个 xpath 首先找到第一个 <p> 标签然后去下面的 span

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

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