使用xpath识别句子中的文本

时间:2014-01-07 15:31:56

标签: selenium xpath

如何在以下代码中编写xpath以识别07971394283:

<form id="HousingRepairs-confirmation-form" enctype="application/x-www-form-urlencoded" action="/communal-repairs-statuses-subscription/confirm.jsf?cid=1" method="post" name="HousingRepairs-confirmation-form"> 

    <input type="hidden" value="HousingRepairs-confirmation-form" name="HousingRepairs-confirmation-form"> <div class="fieldset-container"> 

    <p>Thank you for completing the communal repairs subscription form.</p> 

    <h3>What happens next?</h3> 
    <p> The mobile number **07971394283** will be added to the relevant subscription list. If you wish to unsubscribe at any time please use our <a id="HousingRepairs-confirmation-form:unSubscribeLink" href="https://contact.camden.gov.uk/unsubscribe-communal-repairs-alerts" name="HousingRepairs-confirmation-form:unSubscribeLink">communal repairs alerts unsubscription form</a>

3 个答案:

答案 0 :(得分:0)

这应该有效:

"//p[contains(text(),'07971394283')]"

此XPath正在搜索包含07971394283的第一段。

编辑:我刚注意到需要一串数字而不是特定的数字。在这种情况下,AJMansfield的回答是正确的方法。

答案 1 :(得分:0)

要查找十一位数的字符串,请使用正则表达式。从最基本到最复杂:

  • \d{11}将匹配连续的任意11位数字。但是,这可能并不理想,因为它也会匹配较长序列中的前11位数字。如果需要排除更长的数字字符串,请使用其他解决方案。

  • 作为一个整体,
  • \D(\d{11})\D将匹配由非数字字符,十一个数字和另一个非数字字符组成的任何字符串。数字本身将作为组1进行匹配。这种方法的问题是,如果数字位于字符串的开头或结尾,则无法匹配。如果这是一种可能的情况,还有其他方法可以处理它。

  • 如果您的语言支持前瞻/后瞻,则可以使用(?<!\d)\d{11}(?!\d)。这就是说,匹配一个11位数的序列,在它之前或之后没有另一个数字。不幸的是,并非所有工具都支持前瞻/后瞻。

有关如何在xpath中使用此内容的信息,此主题还有许多其他资源:

答案 2 :(得分:0)

这是不可能的,仅仅是因为Selenium依赖于浏览器的XPath引擎(并且在某些情况下提供了它自己的存在),其中主要浏览器的 none 实际上是support XPath 2(必需的)对于XPath中的正则表达式。

你必须首先找到元素然后然后证明它有你需要的内容(在这个问题的其他地方发布的正则表达式将起作用)。