我正在编写一个 Protractor 测试,我需要使用 getText() 读取带有 id='mylabel' 的 span/div。然后我需要使用 sendKeys() 将值传递给输入 (id='myinput')。

所以,我这样做:

var value;
element(by.id('mylabel')).getText().then(function(txt){
    value = txt;
    element(by.id('myinput')).sendKeys(value);
    // do "other protractor tasks" with 'value'.
})

但是,有没有一种方法可以避免嵌套,即仅在设置 value 变量后才要求 Protractor 执行 sendKeys 和后续操作?

上面是一个简单的例子,但我很快发现代码因为等待 promise 被解决而陷入多重嵌套。此外,我观察到,如果“其他 Protractor 任务”由于线下某处的错误而引发错误(它只是挂起并超时),则 Protractor 不会提供堆栈跟踪。

我正在使用 Protractor 2.1.0 并且我正在使用 Angular JS 页面。

我特别想知道在使用 Protractor 的嵌套任务中出现静默错误是否是一个已知问题,是否有解决方法?

最佳答案

Protractor 处理至少一层 Promise 而不需要 then 函数。这样你就可以期待同步流。

如果您正在寻找基于事件的操作,例如观看要更新的值,那么您可以设置如下内容:

function waitForTextToUpdate(elm, defaultText, timeout) {
    if (typeof(timeout) === 'undefined') {
        timeout = 10000;
    }
    return browser.driver.wait(function() {
        return elm.getText().then(function(value) {
            return !(value.indexOf(defaultText) > -1);
        });
    }, timeout, "Expectation error (waitForTextToUpdate): Timed out waiting for element state to change.");
}

关于 Protractor - getText 作为 sendKeys 和其他操作的输入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32631803/

10-16 15:05