我试图使用XPath函数contains(),该函数的字符串分为两部分,但它抛出了一个无效的XPath错误
我试图使用XPath函数我试图使用XPath函数contains(),该函数的字符串分为两部分,但它抛出了一个无效的XPath错误,xpath,webdriver,Xpath,Webdriver,我试图使用XPath函数contains(),该函数有一个分为两部分的字符串,但在计算时抛出了一个“无效XPath表达式”错误 以下是我努力实现的目标: 正常工作xpath: //*[contains(text(),'some_text')] 现在我想把它分成两部分,因为一些随机文本正在填充其中: //*[contains(text(),'some'+ +'text')] 我所做的是使用“+”+”来连接表达式中的字符串,就像我们在Java中所做的那样。请建议如何解决此问题。您可以将2个con
contains()
,该函数有一个分为两部分的字符串,但在计算时抛出了一个“无效XPath表达式”错误
以下是我努力实现的目标:
正常工作xpath:
//*[contains(text(),'some_text')]
现在我想把它分成两部分,因为一些随机文本正在填充其中:
//*[contains(text(),'some'+ +'text')]
我所做的是使用“+”+”来连接表达式中的字符串,就像我们在Java中所做的那样。请建议如何解决此问题。您可以将2个
contains()
组合到一个谓词表达式中,以检查文本节点是否包含2个特定的子字符串:
//*[text()[contains(.,'some') and contains(.,'text')]]
如果您需要通过确保文本节点中的'text'
位于'some'
之后的某个位置来更加具体,那么您可以使用子字符串-after()
和contains()
的组合,如下所示:
//*[text()[contains(substring-after(.,'some'),'text')]]
如果每个目标元素始终包含一个文本节点,或者如果在一个元素中找到多个文本节点时只需要考虑第一个文本节点,则可以将上述XPath简化如下:
//*[contains(substring-after(text(),'some'),'text')]
哇!这是一个极好的回答。。切中要害,还是通过解释。非常感谢。