如果我不知道何时发生错误,怎么能发现错误?
我使用的是Selenium + Java。为JS网页创建测试。
发生错误时,测试会继续单击元素。 错误在那一刻是可见的,因此它不是消息框或类似的东西。错误框变得可见。然后一段时间过去了,测试崩溃说不能点击某个元素。
在我的测试运行时,如何监听任何随机元素是可见的(或可点击的)?这将使我能够捕获错误,测试不会失败。
我应该将测试分成两个线程,一个是监听错误,另一个是运行我的测试用例?
答案 0 :(得分:0)
我建议使用以下
List<WebElement> Elements = getDriver().findElements(method);
首先,当您进入页面时,您只需准备页面元素列表。 然后在代码中多次包含此过程。您将列表与新列表进行比较,并查看是否出现错误元素,表示您将在新列表中再添加一个元素。然后你抓住它。
答案 1 :(得分:0)
最好的选择是了解并解决潜在的错误情况。
如果错误只是在测试中发生的,或者无法解决,我建议查看您的驱动程序配置,并确保您看到的对话框不会被Unexpected_Alert_Behavior的驱动程序设置所覆盖。如果你关闭了它,我会尝试打开它,看看它会如何影响你的行为。
我不完全确定会解决列出的问题bc你提到的对话是dom的一部分,而'意外'警告行为通常在我看到的那个上下文中是不可见的。我相信这也是IE实现的非常具体。
最后,我想我会在课堂上使用一种方法来为我执行所有的findbys。在该方法中,我将使用显式等待来检查随机添加,如果等待无法解析“错误引用”,则使用它来解析实际请求的对象。
/** By identifier for the error dialog addition.*/
private static final By ERR_DLG = By.className("error");
/**
* Delegate method that will attempt to resolve the occasional page error condition prior to performing the delegate lookup on the WebDriver.
* <p/>
* This method will fail on Assert behavior if the error dialog is present on the page.
*
* @param driver WebDriver referenced for the test instance.
* @param lookup By reference to resolve the desired DOM reference.
* @return WebElement of the specified DOM.
*/
private final WebElement safeResolve(WebDriver driver, By lookup) {
WebDriverWait wait = new WebDriverWait(driver, 1);
WebElement errDlgRef = null;
try {
errDlgRef = wait.until(ExpectedConditions.visibilityOfElementLocated(ERR_DLG));
} catch (TimeoutException te) {
//This is actually OK, in that in the majority of cases this is the expected behavior.
//Granted this is bad form for Unit-Testing, but Selenium at an Integration-Test level changes the rules.
}
Assert.assertNull("Unexpected Error Dialog exists in DOM", errDlgRef);
return driver.findElement(lookup);
}
这个解决方案是一种锤子,但我认为它会起作用。所有查找都需要通过此方法。如果在测试中使用List WebDriver.findElements(By)函数,或者从这个函数中抽象出来,您可能还需要一个类似的方法。