1

我想验证某些文本是否不存在,并且我想通过使用正则表达式来定义该文本。不过,我不知道如何在代码中插入正则表达式,因为我不知道它是否发现我传递的是一个正则表达式,或者它只是假设它是一个字符串:

            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");
            }
4

2 回答 2

3

不幸的是,你不能真正做到这一点。虽然 Java 确实很好地支持正则表达式,但 WebDriver API 不支持。WebDriver API 中的每个String参数都按字面意思作为字符串,而不是正则表达式。

您可能已经通过运行代码确认了这一点。而且你没有错过任何东西,你不能使用正则表达式来搜索 WebElements。如果您想知道为什么,原因是 WebDriver 主要是为测试自动化而设计的——您有一个前端测试并且您不想单击所有内容?使用网络驱动程序!你在做别的事吗?不确定你是否有合适的工具。

重新考虑您的方法-您为什么要尝试通过正则表达式进行匹配?您正在运行网站测试吗?您不确定那里应该显示什么?好吧,那是错误的!您应该测试您的网站是否表现得像预期的那样。

如果您在每次页面加载后测试页面是否包含一些错误消息并且您确定要执行此操作,请考虑使用不同的方法。你能找一个容器id="error-message"还是什么的?您能否查看 URL 或页面标题是否包含404 not found或您需要声明的任何类似内容?

你可以做什么?

  • 如果没有必要,尽量不要按文本搜索。
  • 深入研究XPath 1.0,看看它能为您做什么。虽然没有启用正则表达式的函数(那些可以在 XPath 2.0 中找到,但我们不能使用它),但其中有很大的优势。例如,没有原生lower-case()函数,你可以使用translate(). 或者干脆使用多个contains()调用。您可以使用|将节点集联合在一起。使用这两个,您可以使用 looooooong XPath 重构您的查询。但这是你应该做的最后一件事。这不好。很坏。
  • 如果您仍然不相信您不应该搜索您正在搜索的内容,这可能是最简单的方法。我仍然认为这很糟糕,因为您不知道错误/警告/通知来自何处,某些用户可能将“警告:错误用户”作为他的用户名。但它做你的事。

    String bodyText = driver.findElement(By.tagName("body")).getText();
    boolean containsError = bodyText.matches("[Ee]rror:|[Ww]arning:|[Nn]otice:|[Ee]xception:");
    
于 2013-07-14T08:44:20.227 回答
-1
String str1='[Ee]rror:|[Ww]arning:|[Nn]otice:|[Ee]xception:';

String str2=driver.findElement(By.tagname("body"));

if(str1.equals(str2))

{
     System.out.println("Fail");
}
else
{
    System.out.println("Pass");
}
于 2013-07-15T05:18:38.033 回答