为什么我的XPath没有基于text()选择?

时间:2017-12-05 14:06:28

标签: html xml selenium xpath

我在firefox(没有框架)中有一个页面,其中包含以下部分的html代码:

...
<div class="col-sm-6 align-right">
    <a href="/efelg/download_zip" class="alert-link">
        Download all results in .zip format
     </a>
</div>
...

我想用selenium XPATH表达式选择。为了测试我的XPATH表达式,我为firefox安装了一个名为'TryXpath'的附加组件,以便检查我的表达式。但是,表达式似乎不正确,因为没有选择任何元素。这是表达式:

//a[text()= "Download all results in .zip format"]

但那个表达有什么问题?我发现它有不同的答案 - 但对我来说这似乎不起作用。为什么我会得到0次点击?为什么表达式错误找到我上面发布的html元素(没有框架,元素是可见的和可点击的......)

2 个答案:

答案 0 :(得分:2)

你可以试试这个:

//a[contains(text(),'Download all results in .zip format')]

它正在我这边工作,请尝试让我知道

答案 1 :(得分:1)

您的XPath未选择显示的a元素的原因是由于目标文字周围的前导和跟踪空白区域。虽然您可以使用{{1}如同currently upvoted and selected answer那样,请注意,当目标字符串是contains()元素中HTML中找到的字符串的子字符串时,它也可以匹配 - 这可能是也可能不是合乎需要的。

请考虑使用a并通过平等进行测试:

normalized-space()

这将检查//a[normalize-space()='Download all results in .zip format'] 的(空格规范化的) 字符串值 是否等于 给定的文字。

另见