<i id='UjIFt'><tr id='UjIFt'><dt id='UjIFt'><q id='UjIFt'><span id='UjIFt'><b id='UjIFt'><form id='UjIFt'><ins id='UjIFt'></ins><ul id='UjIFt'></ul><sub id='UjIFt'></sub></form><legend id='UjIFt'></legend><bdo id='UjIFt'><pre id='UjIFt'><center id='UjIFt'></center></pre></bdo></b><th id='UjIFt'></th></span></q></dt></tr></i><div id='UjIFt'><tfoot id='UjIFt'></tfoot><dl id='UjIFt'><fieldset id='UjIFt'></fieldset></dl></div>
<legend id='UjIFt'><style id='UjIFt'><dir id='UjIFt'><q id='UjIFt'></q></dir></style></legend>
    <bdo id='UjIFt'></bdo><ul id='UjIFt'></ul>
    1. <small id='UjIFt'></small><noframes id='UjIFt'>

        <tfoot id='UjIFt'></tfoot>

      1. 解释 Protractor 中的 async/await

        Explain about async/ await in Protractor(解释 Protractor 中的 async/await)
          <bdo id='f4sc2'></bdo><ul id='f4sc2'></ul>

              <i id='f4sc2'><tr id='f4sc2'><dt id='f4sc2'><q id='f4sc2'><span id='f4sc2'><b id='f4sc2'><form id='f4sc2'><ins id='f4sc2'></ins><ul id='f4sc2'></ul><sub id='f4sc2'></sub></form><legend id='f4sc2'></legend><bdo id='f4sc2'><pre id='f4sc2'><center id='f4sc2'></center></pre></bdo></b><th id='f4sc2'></th></span></q></dt></tr></i><div id='f4sc2'><tfoot id='f4sc2'></tfoot><dl id='f4sc2'><fieldset id='f4sc2'></fieldset></dl></div>
              <tfoot id='f4sc2'></tfoot><legend id='f4sc2'><style id='f4sc2'><dir id='f4sc2'><q id='f4sc2'></q></dir></style></legend>

              <small id='f4sc2'></small><noframes id='f4sc2'>

                  <tbody id='f4sc2'></tbody>
                  本文介绍了解释 Protractor 中的 async/await的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我是量角器的新手.这个函数中的 async/await 是如何工作的?谁能给我解释一下?

                  I'm new to protractor. How does async/await in this function works? Can anybody explain it to me?

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

                  推荐答案

                  这完全是关于 JavaScript 的异步特性.

                  This is all about asynchronous nature of JavaScript.

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

                  Currently protractor proposes several ways to handle asynchronous actions, (I didn't describe direct promise chaining, and generators here):

                  1) 承诺管理器/控制流

                  https://github.com/SeleniumHQ/selenium/wiki/WebDriverJs#控制流

                  这是一种抽象,使您的所有操作都被一个一个地调用,就像一个队列.每个动作都会返回一个特殊的对象——一个 Promise.它表示异步操作的结果,将在将来接收.

                  This is abstraction that makes all your actions to be called one by one, like a queue. Each action returns a special object - a Promise. It represents result of async operation, that will be received in future.

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

                  https://ponyfoo.com/articles/understanding-javascript-async-await#using-async-await

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

                  It is new abstraction around promises objects and allows to easily chain actions one by one. Advantage is this is native language construction, instead of Promise Manager, and makes your code look like synchronized, with try/catch and other familiar constructions.

                  您可以将 await 想象为暂停代码执行,直到从操作返回的承诺得到解决"

                  You can think of await like "suspend code execution until promise that returned from action is resolved"

                  但是 async/await 仍然可以在内部使用 Promise.

                  But async/await still works with promises inside.

                  在 protractorJS 中使用 async/await 时的一些建议:

                  1. 确保您禁用了控制流/承诺管理器:https://github.com/angular/protractor/blob/master/lib/config.ts#L714将等待与启用的控制流混合可能会导致不可预知的结果.

                  1. Make sure you disabled control flow / promise manager: https://github.com/angular/protractor/blob/master/lib/config.ts#L714 Mixing awaits with enabled control flow may lead to unpredictable results.

                  不要忘记在所有异步操作前加上 await(通常这都是量角器 api 方法).如果您忘记执行此操作 - 没有 await 的操作不会与其他操作一起排队,因此操作顺序将被破坏

                  Do not forget to prepend ALL your async actions with await (usually this is all protractor api methods). If you will forgot to do this - action without await won't be queued with other actions, so order of actions will be broken

                  确保您使用的是支持此功能的 nodejs - 至少 nodejs 7.8.x(或更高版本).如果使用 TypeScript,请将编译目标设置为target":es2017"

                  Make sure you are using nodejs that supports this - at least nodejs 7.8.x (or newer). If TypeScript is used, set compile target as "target": "es2017"

                  为了不忘记应该在哪里使用 await,而在哪里不使用,我可以建议使用插件设置 eslint - https://www.npmjs.com/package/eslint-plugin-no-floating-promise 并配置 eslint 为这条规则抛出错误:https://eslint.org/docs/user-guide/configuring/rules#配置规则

                  To not forget where await should be used, and where is not, i can suggest to setup eslint with plugin - https://www.npmjs.com/package/eslint-plugin-no-floating-promise and configure eslint to throw errors for this rule: https://eslint.org/docs/user-guide/configuring/rules#configuring-rules

                  更多阅读:https://github.com/angular/protractor/blob/master/docs/control-flow.md

                  https://github.com/SeleniumHQ/selenium/wiki/WebDriverJs#option-3-migrate-to-asyncawait

                  这篇关于解释 Protractor 中的 async/await的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  What are valid deviceNames for Chrome emulation testing with Protractor?(使用 Protractor 进行 Chrome 模拟测试的有效设备名称是什么?)
                  Protractor Check if Element Does Not Exist(量角器检查元素是否不存在)
                  Protractor e2e Tests Login Redirection(Protractor e2e 测试登录重定向)
                  Protractor browser.wait doesn#39;t wait(量角器 browser.wait 不等待)
                  How to use Protractor with Angular 2?(如何在 Angular 2 中使用量角器?)
                  how test separate environmental name with protractor conf js?(如何使用量角器 conf js 测试单独的环境名称?)

                    <i id='Lyd2a'><tr id='Lyd2a'><dt id='Lyd2a'><q id='Lyd2a'><span id='Lyd2a'><b id='Lyd2a'><form id='Lyd2a'><ins id='Lyd2a'></ins><ul id='Lyd2a'></ul><sub id='Lyd2a'></sub></form><legend id='Lyd2a'></legend><bdo id='Lyd2a'><pre id='Lyd2a'><center id='Lyd2a'></center></pre></bdo></b><th id='Lyd2a'></th></span></q></dt></tr></i><div id='Lyd2a'><tfoot id='Lyd2a'></tfoot><dl id='Lyd2a'><fieldset id='Lyd2a'></fieldset></dl></div>
                    • <tfoot id='Lyd2a'></tfoot>
                        <bdo id='Lyd2a'></bdo><ul id='Lyd2a'></ul>
                        <legend id='Lyd2a'><style id='Lyd2a'><dir id='Lyd2a'><q id='Lyd2a'></q></dir></style></legend>

                            <tbody id='Lyd2a'></tbody>
                        • <small id='Lyd2a'></small><noframes id='Lyd2a'>