量角器定时问题

时间:2017-09-27 15:00:51

标签: protractor e2e-testing

我目前在我的一个Protractor测试规范中有以下代码:

.then(function() {
    return button.click();
})
.then(function() {
    return element(otherButton).isDisplayed();
})
.then(function(otherButtonIsPresent) {
    if(otherButtonIsPresent) {
        return browser.wait(EC.elementToBeClickable(element(otherButton)), getWaitTime())
            .then(function() {
                element(otherButton).click();
                return element(continueButton).isPresent();
            })
    }
})

当我使用Chrome使用--debug-brk--inspect标志进行调试时,我可以通过这些检查并恢复正常。当我在没有标志的情况下运行相同的测试时,测试失败并在尝试点击它之前寻找otherButton期间停止。

我想知道这是否是因为在调试过程中,我设置断点并等待按钮显示在屏幕上,然后再尝试点击它们。

我需要确保在尝试点击它之前在页面上显示此元素,并且想知道是否有其他方法可以完成此操作?

由于

1 个答案:

答案 0 :(得分:0)

我正在使用答案,因为我无法发表评论。

您自己基本上提到它:点击按钮后,您只想等到下一个按钮可点击。 因此,您的.then() - 函数应该从它所依赖的按钮开始。对我而言,三个排队的.then() - 函数依赖于相同的条件,因此在.click()第一个按钮之后,第二个.then()立即执行,而不是等待之前的.click()完成。

因此,将.then()直接放在相关的.click()后面和前面的.then() - 函数中,这应该可行:

.then(function() {
    element(button).click().then(function(){
       element(otherButton).click().then(function(){
           return element(continueButton).isPresent();
       });
    });
});

或者,如果您使用ExpectedConitions,则不应该使用.then() - 函数。因为Protractor应该管理ControlFlow,允许你在没有链式.then()的情况下编写它 - 函数:

.then(function() {
    browser.wait(EC.elementToBeClickable(element(button)), getWaitTime());
    element(button).click();
    browser.wait(EC.elementToBeClickable(element(otherButton)), getWaitTime());
    element(otherButton).click();
    browser.wait(EC.elementToBeClickable(element(continueButton)), getWaitTime());
    return element(continueButton).isPresent();
});

This nice post详细阐述了异步写入,但感谢Protractor同步执行。

作为另一个结合我的两个输入的例子,有点双重保障测试:

.then(function() {
    browser.wait(EC.elementToBeClickable(element(button)), getWaitTime());
    element(button).click().then(function(){
       browser.wait(EC.elementToBeClickable(element(otherButton)), getWaitTime());
       element(otherButton).click().then(function(){
           browser.wait(EC.elementToBeClickable(element(continueButton)), getWaitTime());
           return element(continueButton).isPresent();
       });
    });
});