在 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
<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)
同样,要到达第一个 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