量角器隐身性的片状,抛出NoSuchElementError

时间:2015-05-13 08:22:39

标签: javascript twitter-bootstrap protractor

我正在使用量角器测试一个非角度应用程序,我在测试中有一个登录助手函数,类似于以下内容:

function login() {
        return waitUntilVisible($('#txtUsername'))
            .then(function () {
                $('#txtUsername').sendKeys('tom');
            })
            .then(function () {
                $('#txtPassword').sendKeys('*');
            })
            .then(function () {
                $('#btnLogin').click();
            })
            .then(function () {
                // this is the flaky line
                return browser.wait(protractor.ExpectedConditions.invisibilityOf($('#txtUsername')), 20000, 'Element never disappeared');
            });
    }

其中browser.wait(protractor.ExpectedConditions.invisibilityOf($('#txtUsername')), 20000, 'Element never disappeared')等待包含要关闭的登录表单的引导模式。然而,这条线被证明是非常片状的,偶尔会失败:

  

NoSuchElementError:找不到使用定位器找到的元素:By.cssSelector(“#txtUsername”)

甚至:

  

StaleElementReferenceError:陈旧元素引用:元素未附加到页面文档

我的第一个是模式在调用行之前关闭,但是,invisibilityOf的文档建议它应该处理不存在的元素,将其表示为:

  

期望检查元素是否在DOM上不可见或不存在。

如何使这条线健壮?

2 个答案:

答案 0 :(得分:1)

invisibilityOf切换到stalenessOf已经成功了。

答案 1 :(得分:0)

函数visibilityOftextToBePresentInElement不是原子函数,可能会产生错误。在内部,他们会依次检查isPresentisDisplayed / getText,但如果在这些检查之间删除了一个元素,则会发生NoSuchElementErrorStaleElementReferenceError

此错误可能会在将来的版本中修复。在您使用我包装为npm模块的解决方法之前:

https://www.npmjs.com/package/protractor-save-expected-conditions