量角器,我必须在量角器调用后使用then()吗?

问题描述 投票:1回答:1

可以写:

getFieldX().clear().sendKeys('abc');

或者我应该写:

getFieldX().clear().then( () => sendKeys('abc));

我对量角器中的Promise处理感到困惑。 clear()返回一个承诺,所以我之后应该使用.then(),不是吗?

但我找到了.then和一些没有的例子。量角器本身有一个没有.then()的例子:https://www.protractortest.org/#/control-flow

Protractor是否有自己的机制并且一个接一个地做出决定,所以在一个返回Promise的量角器调用之后不需要使用.then()

量角器的控制流程只在规范中有效吗?在正常功能中使用.sendKeys()时,我必须使用.sendKeys().then(...)

promise protractor chaining method-chaining
1个回答
1
投票

这一切都取决于你是否使用SELENIUM_PROMISE_MANAGER。由于这是(有?)被弃用,我不会使用它。默认情况下应将其设置为false,但如果您想确保可以将SELENIUM_PROMISE_MANAGER = false;添加到conf文件中。量角器移动的方式是使用async / await,所以你的sendKeys函数看起来像:

let field = element(by.css('CSS.Selector'));
await field.clear();
await field.sendKeys('abc');

因为这些是异步函数,所以您需要正确定义函数,因此基本规范如下所示:

describe('Demonstrating async/await',function(){
  it('Should send some keys', async function(){
    let field = element(by.css('CSS.Selector'));
    await field.clear();
    await field.sendKeys('abc');
  });
});

一个重要的区别是函数需要定义为async function()。就阅读代码而言,await简单地可以被解读为“等到承诺决定继续前进”。它确实有点乏味,你觉得你在每行代码(你基本上做)之前写await,但我发现它明显优于.then()树。

© www.soinside.com 2019 - 2024. All rights reserved.