可以写吗?
getFieldX().clear().sendKeys('abc');
或者我应该写:
getFieldX().clear().then( () => sendKeys('abc));
我对量角器中的Promise处理感到非常困惑。 clear()
返回了一个承诺,所以我以后应该使用.then()
,对吗?
但是我发现带有.then的示例,而有些则没有。
量角器本身有一个不含.then()
的示例:
https://www.protractortest.org/#/control-flow
量角器是否具有自己的机制,并在另一个承诺之后解决一个问题,因此在返回Promise的量角器调用之后不需要使用.then()
吗?
并且量角器的控制流仅在规范中有效吗?
在正常功能中使用.sendKeys()
时,我必须使用.sendKeys().then(...)
吗?
答案 0 :(得分: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()
树要好得多。