问题:进行比较时,我得到一个失败的跟踪错误,但预期和实际结果是一样的。我首先获取字符串的输出,从eclipse中返回的控制台复制,并使用该字符串作为精确比较。有涉及新线路时是否存在问题?
@Test
public void testErrorPage() throws InterruptedException{
// Optional, if not specified, WebDriver will search your path for chromedriver.
System.setProperty("webdriver.chrome.driver","C:\\Users\\HASANK\\Desktop\\tEST\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("disable-infobars");
WebDriver driver = new ChromeDriver(options);
driver.get("http://thisisatest.com");
Thread.sleep(3500); // Let the user actually see something!
String error= driver.findElement(By.className("errorText")).getText();;
System.out.println(error);
String expectedTitle = "404\r\n" +
"The requested URL was not found on this server.";
assertEquals(expectedTitle,error);
driver.quit();
}
从gettext返回的字符串:
404
在此服务器上找不到请求的网址。
答案 0 :(得分:2)
最有可能的问题出在这里:"404\r\n"
:简单地 非常容易获得错误这样的换行符。
所以真正的答案是避免进行精确平等比较。相反,你可能正在做
assertThat(actual, contains("whatever"))
其中contains()
将是一个hamcrest匹配器,用于检查“{1}}中在某处是否显示 。
当然,actual
的缺点是,当匹配的字符串“过于通用”时,它可能会导致“误报”。但另一方面:contains()
对变化也更加强大。当您进行完全匹配时,此处的标签转换为空格或其他空格/换行符会破坏您的完全匹配。特别是在测试“网络输出”时,您需要健壮。否则,由于输出的细微变化,您会不断更新测试用例。