如何根据XPATH过滤元素?

时间:2016-07-14 11:50:50

标签: selenium xpath

我想选择仅限于顶级国家/地区或仅限其他国家/地区的范围

<div>
  <div>
    <span class="hb">Top Countries</span>
  </div>
  <span>Australia</span>
  <span>Guinea-Bissau</span>
  <div>
    <span class="hb">Other</span>
  </div>
  <span>Austria</span>
  <span>Mauritania</span>
  <span>Mauritius</span>
  <span>Nauru</span>
  <span>Palau</span>
  <span>Saudi Arabia</span>
</div>

我尝试了//*[text()='Top Countries']/../following-sibling::span and not(//*[text()='Other']/../following-sibling::span)

如果我单独尝试两种XPATH,它们都能正常工作,但它们组合起来却不起作用。

我想只选择热门国家/地区并将其列入['Australia', 'Guinea-Bissau']并过滤掉其他国家/地区。

如果我使用//*[text()='Top Countries']/../following-sibling::span,所有国家/地区都会被选中。即。 ['Australia', 'Guinea-Bissau', 'Spain', 'Switzerland', 'UK', 'USA', 'Austria','Mauritania', 'Mauritius','Nauru','Palau','Saudi Arabia']

选择//*[text()='Other']/../following-sibling::span项目为['Austria','Mauritania', 'Mauritius','Nauru','Palau','Saudi Arabia']

列表是动态生成的,因此我无法根据文字/国家/地区名称选择它们。

3 个答案:

答案 0 :(得分:2)

是:

//span[preceding-sibling::div[1]/descendant::text()='Top Countries']

选择:

Element='<span>Australia</span>'
Element='<span>Guinea-Bissau</span>'

<小时/> 显然,只选择其他国家/地区

//span[preceding-sibling::div[1]/descendant::text()='Other']

<小时/> 查看精彩的online xpath tester

答案 1 :(得分:0)

这有帮助吗?假设热门国家下总是两个国家

//span[text() = 'Top Countries']/../following-sibling::span[1]
//span[text() = 'Top Countries']/../following-sibling::span[2]

答案 2 :(得分:0)

您可以创建两个列表,一个包含所有元素,另一个包含不需要的元素

List<WebElement> all = driver.findElements(By.xpath("//*[text()='Top Countries']/../following-sibling::span"));
List<WebElement> other = driver.findElements(By.xpath("//*[text()='Other']/../following-sibling::span"));

而不是删除other个国家/地区

all.removeAll(other);

all现在只包含&#34;热门国家&#34;