Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 解释量角器中的异步/等待_Javascript_Protractor_Jasmine2.0 - Fatal编程技术网

Javascript 解释量角器中的异步/等待

Javascript 解释量角器中的异步/等待,javascript,protractor,jasmine2.0,Javascript,Protractor,Jasmine2.0,我不熟悉量角器。此函数中的async/await是如何工作的?有人能给我解释一下吗 it('TC_01 - Verify Home page title', async () => { await headerPage.waitForTitleContain('Homepage', 30000); await expect(headerPage.getTitle()).toEqual('Homepage'); }); 这一切都是关于JavaScript的异步性质 目前,量

我不熟悉量角器。此函数中的async/await是如何工作的?有人能给我解释一下吗

it('TC_01 - Verify Home page title', async () => {
    await headerPage.waitForTitleContain('Homepage', 30000);
    await expect(headerPage.getTitle()).toEqual('Homepage');
});

这一切都是关于JavaScript的异步性质

目前,量角器提出了几种处理异步操作的方法(我没有在这里描述直接承诺链和生成器):

1)承诺经理/控制流程

这是一种抽象,使您的所有操作都像队列一样逐个调用。每个动作都会返回一个特殊的对象——承诺。它表示异步操作的结果,该结果将在将来接收

2)第二种方式-异步/等待

它是围绕承诺对象的新抽象,允许轻松地一个接一个地链接动作。优点是这是本地语言构造,而不是Promise Manager,并使您的代码看起来像是同步的,带有try/catch和其他熟悉的构造

您可以将wait想象为“在解析操作返回的承诺之前暂停代码执行”

但是async/await仍然在内部使用承诺

将async/await与量角器JS一起使用时的几点建议:

  • 确保已禁用控制流/承诺管理器: 与启用的控制流混合等待可能导致不可预测的结果

  • 不要忘记用wait(通常这是所有的量角器api方法)预先结束所有异步操作。如果您忘记执行此操作,那么不等待的操作将不会与其他操作一起排队,因此操作顺序将被打破

  • 确保您使用的nodejs支持此功能-至少是nodejs 7.8.x(或更新版本)。如果使用TypeScript,则将编译目标设置为“目标”:“es2017”

  • 为了不忘记应该在哪里使用await,在哪里不使用await,我可以建议使用plugin设置eslint,并将eslint配置为抛出此规则的错误:

  • 更多内容请阅读:


    第一步是设置
    SELENIUM\u PROMISE\u MANAGER:false
    :。这里有更多信息:派对有点晚了,但是考虑到OP的例子:
    expect()
    不是量角器操作,因此最好将wait放在expect中:
    expect(wait headerPage.getTitle()).toEqual('Homepage')