Selenium + Java错误监听器ext.js

时间:2015-03-03 19:44:37

标签: java selenium extjs listener

如果我不知道何时发生错误,怎么能发现错误?

我使用的是Selenium + Java。为JS网页创建测试。

发生错误时,测试会继续单击元素。 错误在那一刻是可见的,因此它不是消息框或类似的东西。错误框变得可见。然后一段时间过去了,测试崩溃说不能点击某个元素。

在我的测试运行时,如何监听任何随机元素是可见的(或可点击的)?这将使我能够捕获错误,测试不会失败。

我应该将测试分成两个线程,一个是监听错误,另一个是运行我的测试用例?

2 个答案:

答案 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)函数,或者从这个函数中抽象出来,您可能还需要一个类似的方法。