我想验证某些文本不存在,并且我想使用正则表达式定义该文本。 不过,我不知道如何在代码中插入正则表达式,因为我不知道它是否会识别出我传递的是正则表达式,或者它只是假设它是一个字符串:
if(wait.until(ExpectedConditions.not(ExpectedConditions.textToBePresentInElement(By.tagName("body"), "[Ee]rror:|[Ww]arning:|[Nn]otice:|[Ee]xception:"))))
{
System.out.println("Pass");
}
else
{
System.out.println("Fail");
}
最佳答案
不幸的是,你不能真正做到这一点。虽然 Java 确实很好地支持正则表达式,但 WebDriver API 却不然。 WebDriver API 中的每个 String
参数均按字面意思理解为字符串,而不是作为正则表达式。
您可能已经通过运行代码确认了这一点。而且您没有错过任何内容,您不能使用正则表达式来搜索 WebElements。如果您想知道为什么,原因是 WebDriver 主要是为测试自动化而设计的 - 您有一个前端测试,并且不想单击所有内容?使用网络驱动程序!你在做别的事吗?不确定您是否有合适的工具。
重新考虑您的方法 - 为什么您尝试通过正则表达式进行匹配?您正在运行网站测试吗?您不确定那里应该显示什么吗?嗯,那是错误的!您应该测试您的网站是否按预期运行。
如果您在每次页面加载后测试该页面是否包含某些错误消息并且您确定要这样做,请考虑采用不同的方法。您可以寻找带有 id="error-message"
或其他内容的容器吗?您能否查看 URL 或页面标题是否包含 404 not found
或您需要断言的任何类似内容?
你能做什么?
- 如果没有必要,尽量不要通过文字搜索。
- 深入了解XPath 1.0看看它能为您做些什么。虽然没有支持正则表达式的函数( those could be found in XPath 2.0 ,但我们不能使用它),但其中有很多功能。例如,没有原生
lower-case()
函数,您可以使用translate()
。或者简单地使用多个contains()
调用。和you can use|
to union node-sets一起。有了这两个,您就可以使用 looooooong XPath 重建您的查询。但这是您最不应该做的事情之一。这不好。非常糟糕。 如果您仍然不确定不应该搜索您正在搜索的内容,这可能是最简单的方法。我仍然认为它很糟糕,因为您不知道错误/警告/通知从哪里来,某些用户可能将“警告:错误用户”作为他的用户名。但这是你的事。
String bodyText = driver.findElement(By.tagName("body")).getText(); boolean containsError = bodyText.matches("[Ee]rror:|[Ww]arning:|[Nn]otice:|[Ee]xception:");
关于java - Webdriver Java : Using regular expressions - how to insert them?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17632590/