我想选择仅限于顶级国家/地区或仅限其他国家/地区的范围
<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']
列表是动态生成的,因此我无法根据文字/国家/地区名称选择它们。
答案 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;