目前,我正在使用java和selenium rc编写自动化测试。
我想验证用户界面上的所有内容,功能如下:
public String UITest() throws IOException {
String result="Test Start<br />";
try {
openfile(1);
for (String url : uiMaps.keySet()) {
selenium.open(url);
for (String item : uiMaps.get(url)) {
assertEquals(url+" check: " + item, true,selenium.isTextPresent(item));
result+=url+" check: " + item+" : OK<br />";
}
}
} catch (AssertionError e) {
result+=e.getMessage();
}
result+="Test finished<br />";
return result;
}
函数假设返回一个String包含有关测试的信息。但是,一旦发生断言错误,该函数就会停止。
所以,我想知道是否有办法忽略失败并继续执行所有断言验证。
感谢您的帮助
答案 0 :(得分:18)
您可以使用JUnit 4 error collector rule:
ErrorCollector规则允许 执行测试后继续 找到第一个问题(for 例如,收集所有 表中的行和报告不正确 他们一下子就完成了)
例如,您可以编写这样的测试。
public static class UsesErrorCollectorTwice {
@Rule
public ErrorCollector collector= new ErrorCollector();
@Test
public void example() {
String x = [..]
collector.checkThat(x, not(containsString("a")));
collector.checkThat(y, containsString("b"));
}
}
错误收集器使用hamcrest Matchers。根据您的喜好,这是积极的与否。
答案 1 :(得分:2)
来自Selenium documentation:
所有Selenium Assertions都可以用于3种模式:“assert”,“verify”和“waitFor”。例如,您可以“assertText”,“verifyText”和“waitForText”。当“断言”失败时,测试将中止。 当“验证”失败时,测试将继续执行,记录失败。这允许单个“断言”以确保应用程序在正确的页面上,然后是一堆“验证”断言来测试表单字段值,标签等。
答案 2 :(得分:1)
我确定你现在已经弄清楚了:try-catch应该在for循环中,而不是在它之外;)
答案 3 :(得分:0)
不要在函数中声明任何内容。返回说null,并让任何人调用它继续前进,但如果函数返回null则失败