开发者社区> 问答> 正文

Xpath-使用带有部分文本的多个属性的复合语句

我试图a在一个网页上获得一个链接,在该网页上我知道该元素的类名称,但是表中每一行的标题都不同。

对于前。A行可能看起来像 Edit

在Chrome devtools中,我 //a[@class='constantClassName' and contains(text(),'Edit') and starts-with(@title,'Edit')]得到了大部分帮助。

我似乎无法上班的是追加ends-with(@title,'TextIKnowAheadOfTime')工作。在我的用例中,contains(text(),'sometext')可能会返回多个结果,因此我需要完全匹配。

在这里使用Java,并且将Java正则表达式与我想要的字符串连接起来会是最快的方法,或者是否有xpath查询方法通过完全匹配ends-with()?获得单个结果?

问题来源:Stack Overflow

展开
收起
montos 2020-03-26 19:07:02 640 0
1 条回答
写回答
取消 提交回答
  • 这样的答案说明

    默认情况下,selenium使用浏览器随附的“本机”版本的XPath。您可以使用JavaScript编写的Selenium随附的版本。乍一看,这似乎实现了XPath 1.0。

    答案是旧的,但即使到现在,浏览器也不支持XPath-2.0。这是相关的,因为fn:ends-with(...)它是XPath-2.0函数

    但是您可以使用以下XPath-1.0组合来模拟它。在此,.是要比较的值,并且$ending是字符串“结束于”的字符串。

    substring(., string-length(.) - string-length($ending) + 1) = $ending
    

    根据您的情况,XPath-1.0等效于

    ends-with(@title,'TextIKnowAheadOfTime')
    

    substring(@title, string-length(@title) - string-length('TextIKnowAheadOfTime') + 1) = 'TextIKnowAheadOfTime'
    

    我想现在您可以使表达式与所需的节点匹配。

    回答来源:Stack Overflow

    2020-03-26 19:08:09
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载