Selenium:如何在给定 xpath 的情况下获取子跨度元素的列表
Selenium: How to get list of child span elements given a xpath
我想获取以下 xpath 的所有子跨度元素
//label[@for='someText']/span
这应该return我
<span class="someClass">"Find this text"</span>
<span id="someId">"Find this text2"</span>
基本上,嵌套的 span 元素的数量可能会动态变化,在这种情况下我们有 2 个 span 子元素,在某些情况下可以只有 1 个或多个 span 元素。
目标:
这背后的意图是获取所有这些元素的文本以进行比较。一旦我得到这些元素,我就可以遍历它们中的每一个,并根据它们的属性获取我想要的数据。
示例 HTML 格式:
<label for="someText">
<span class="nestedClass">
<h2 id="id">
<span>"Hello"</span>
</h2>
<span class="someClass">"Find this text"</span>
<br>
<span id="someId">"Find this text2"</span>
</span>
</label>
有什么办法可以实现吗?有人可以帮我解决这个问题或更好的方法吗?
谢谢。
您可以使用 size() 遍历元素或使用 for 循环简单地迭代列表。
List<WebElement> mySpans = driver.findElements(By.xpath("//label[@for='someText']/span//span"));
int totalSpans = mySpans.size(); // This is the total count of spans - dynamic
// or simply iterate the list of webelements using for loop
for(WebElement span : mySpans)
{
System.out.print(span.getText());
}
使用 xpath
中的任何一个应该适合您。
List<WebElement> elements = driver.findElements(By.xpath("//label[@for='someText']/span/span"));
或者忽略 span 标签 who's parents h2
List<WebElement> elements = driver.findElements(By.xpath("//label[@for='someText']/span//span[not(ancestor::h2)]"));
您可以使用以下 XPath:
//label[@for="someText"]/span/*[not(*)]/text()
这里predicate*[not(*)]
会过滤leaf span节点
我想获取以下 xpath 的所有子跨度元素
//label[@for='someText']/span
这应该return我
<span class="someClass">"Find this text"</span>
<span id="someId">"Find this text2"</span>
基本上,嵌套的 span 元素的数量可能会动态变化,在这种情况下我们有 2 个 span 子元素,在某些情况下可以只有 1 个或多个 span 元素。
目标: 这背后的意图是获取所有这些元素的文本以进行比较。一旦我得到这些元素,我就可以遍历它们中的每一个,并根据它们的属性获取我想要的数据。
示例 HTML 格式:
<label for="someText">
<span class="nestedClass">
<h2 id="id">
<span>"Hello"</span>
</h2>
<span class="someClass">"Find this text"</span>
<br>
<span id="someId">"Find this text2"</span>
</span>
</label>
有什么办法可以实现吗?有人可以帮我解决这个问题或更好的方法吗?
谢谢。
您可以使用 size() 遍历元素或使用 for 循环简单地迭代列表。
List<WebElement> mySpans = driver.findElements(By.xpath("//label[@for='someText']/span//span"));
int totalSpans = mySpans.size(); // This is the total count of spans - dynamic
// or simply iterate the list of webelements using for loop
for(WebElement span : mySpans)
{
System.out.print(span.getText());
}
使用 xpath
中的任何一个应该适合您。
List<WebElement> elements = driver.findElements(By.xpath("//label[@for='someText']/span/span"));
或者忽略 span 标签 who's parents h2
List<WebElement> elements = driver.findElements(By.xpath("//label[@for='someText']/span//span[not(ancestor::h2)]"));
您可以使用以下 XPath:
//label[@for="someText"]/span/*[not(*)]/text()
这里predicate*[not(*)]
会过滤leaf span节点