Xmatch使用Match和Regex在Xpath测试器中工作,但是在代码中抛出InvalidSelectorException无法对'Document'执行'evaluate'

时间:2018-11-17 19:34:12

标签: selenium selenium-webdriver xpath

HTML

<div class="top-section" style="" xpath="1">
         <input id="role" value="admin" hidden="">
            <small>Welcome </small> <b style="">8828024404, MCGM</b>
            <a href=""><img alt="Attendance" width="" height="" src="css/assets/images/logo.png"></img></a>
            <a href="/logout" class="float-right logout">Log Out</a>
        </input>
</div>

要搜索的字符串

8828024404, MCGM

Xpath表达式

//b[matches(text(),'[0-9]{10}, [A-Za-z]*')]

例外

  

org.openqa.selenium.InvalidSelectorException:无效的选择器:无法   用xpath表达式定位元素   // b [matches(text(),'[0-9] {10},[A-Za-z] ')],原因如下   错误:语法错误:无法对“文档”执行“评估”:   字符串'// b [matches(text(),'[0-9] {10},[A-Za-z] ')]'无效   XPath表达式。 (会话信息:chrome = 70.0.3538.102)(驱动程序   信息:chromedriver = 2.42.591088   (7b2b2dca23cca0862f674758c9a3933e685c27d5),平台= Windows NT   10.0.16299 x86_64)(警告:服务器未提供任何堆栈跟踪信息)命令持续时间或超时:0毫秒

2 个答案:

答案 0 :(得分:2)

Selenium支持XPath 1.0版本,而fn:matches来自XPath 2.0。

如果您要匹配以逗号开头的10位数字开头的粗体,可以在XPath下面尝试

//b[string-length(substring-before(., ','))=10 and number(substring-before(., ','))]

如果您对必填元素有更多限制,请告诉我

答案 1 :(得分:0)

完全不确定您的确切用例为什么要 xpath 搜索 Regex

但是结果文本似乎是欢迎消息的一部分,我觉得您的用例可能是提取具有动态性的文本强>例如 8828024404,MCGM

在这种情况下,您可以使用以下任一解决方案:

  • XPath 1:

    //div[@class='top-section']/input[@id='role' and @value='admin']//b
    
  • XPath 2:

    //div[@class='top-section']/input[@id='role' and @value='admin']/small[contains(.,'Welcome')]//following::b[1]