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

    <bdo id='vOPGg'></bdo><ul id='vOPGg'></ul>

<tfoot id='vOPGg'></tfoot>

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

        <legend id='vOPGg'><style id='vOPGg'><dir id='vOPGg'><q id='vOPGg'></q></dir></style></legend>

        Protractor Cucumber BDD 测试在执行前显示通过

        Protractor Cucumber BDD Tests Show Pass before Execution(Protractor Cucumber BDD 测试在执行前显示通过)
        <i id='c5Jv2'><tr id='c5Jv2'><dt id='c5Jv2'><q id='c5Jv2'><span id='c5Jv2'><b id='c5Jv2'><form id='c5Jv2'><ins id='c5Jv2'></ins><ul id='c5Jv2'></ul><sub id='c5Jv2'></sub></form><legend id='c5Jv2'></legend><bdo id='c5Jv2'><pre id='c5Jv2'><center id='c5Jv2'></center></pre></bdo></b><th id='c5Jv2'></th></span></q></dt></tr></i><div id='c5Jv2'><tfoot id='c5Jv2'></tfoot><dl id='c5Jv2'><fieldset id='c5Jv2'></fieldset></dl></div>
          <tbody id='c5Jv2'></tbody>
        <legend id='c5Jv2'><style id='c5Jv2'><dir id='c5Jv2'><q id='c5Jv2'></q></dir></style></legend>

              • <bdo id='c5Jv2'></bdo><ul id='c5Jv2'></ul>

                • <small id='c5Jv2'></small><noframes id='c5Jv2'>

                  <tfoot id='c5Jv2'></tfoot>
                  本文介绍了Protractor Cucumber BDD 测试在执行前显示通过的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我有一个使用 Protractor 和 Cucumber 的示例 BDD 测试.在执行代码时,控制台立即显示结果为通过,代码实际上才开始执行.

                  I have a sample BDD test using Protractor with Cucumber. On executing the code, the console immediately shows the result as passed and the code actually begins executing only after that.

                  我希望执行状态显示与实际执行同步.(例如,控制台显示 - '鉴于我启动量角器演示页面'并执行下面的代码,然后控制台显示下一步和等等)我知道它与异步编码和回调有关,但无法找出确切的问题.

                  I wish execution status display to be in sync with actual execution.(e.g Console displays - 'Given I launch the protractor demo page' and the code underneath is executed, then console displays next step and so on) I know it has got something to do with Async coding and callbacks, not able to figure out the exact problem though.

                  功能文件:

                  Feature: Test
                  Scenario:  Test Scenario
                      Given I launch the protractor demo page
                      When I enter two in the first field
                      And I enter three in the second field
                      And I click Go button
                      Then Result should be displayed as Five
                  

                  步骤文件:

                   var chai = require('chai');
                      var chaiAsPromised = require('chai-as-promised');
                      chai.use(chaiAsPromised);
                      var expect = chai.expect;
                  
                      module.exports = function () {
                  
                  
                          this.Given(/^I launch the protractor demo page$/, function (callback) {
                              browser.driver.manage().window().maximize();
                              browser.get('http://juliemr.github.io/protractor-demo/');
                  
                              browser.getTitle().then(function(text){
                                 console.log('title is - ' + text);
                                  expect(text).to.equal('Super Calculator');
                              });
                           callback();
                          });
                  
                          this.When(/^I enter two in the first field$/, function (callback) {
                              element(by.model('first')).sendKeys('2');
                              callback();
                          });
                  
                          this.When(/^I enter three in the second field$/, function (callback) {
                              element(by.model('second')).sendKeys('3');
                              callback();
                          });
                  
                          this.When(/^I click Go button$/, function (callback) {
                              element(by.id('gobutton')).click();
                              callback();
                          });
                  
                          this.Then(/^Result should be displayed as Five$/, function (callback) {
                               element(by.repeater('result in memory')).all(by.tagName('td')).get(2).getText().then(function(text){
                              expect(text).to.equal('5');
                              });
                              callback();
                          });
                  
                      };
                  

                  推荐答案

                  您需要 return 一个承诺或在步骤定义中使用 done 回调.否则黄瓜不知道你什么时候异步动作完成.

                  You need to either return a promise or use the done callback in your step definitions. Otherwise cucumber doesn't know when your asynchronous actions are complete.

                  我有同样的问题,上面的陈述是 protractor-cucumber github 论坛的核心成员之一的回复.

                  I had the same question and above statement was the response from one of the core members of the protractor-cucumber github forum.

                  当我使用 .then 函数对结果执行某些操作时,我更喜欢 return 承诺,并在我使用 .done 回调函数时不是,你也不需要 callbacks 现在 CucumberJS 支持承诺.所以你的步骤文件应该看起来像 -

                  I prefer to return promises when I am performing some actions on the results with .then function and use .done callback function when I am not, Also you don't need callbacks now CucumberJS supports promises. So your step file should look like -

                  var chai = require('chai');
                  var chaiAsPromised = require('chai-as-promised');
                  chai.use(chaiAsPromised);
                  var expect = chai.expect;
                  
                  module.exports = function () {
                  
                  
                      this.Given(/^I launch the protractor demo page$/, function () {
                          browser.driver.manage().window().maximize();
                          browser.get('http://juliemr.github.io/protractor-demo/');
                  
                        return browser.getTitle().then(function(text){
                             console.log('title is - ' + text);
                              expect(text).to.equal('Super Calculator');
                          });
                      });
                  
                      this.When(/^I enter two in the first field$/, function () {
                         return element(by.model('first')).sendKeys('2'); 
                      });
                  
                      this.When(/^I enter three in the second field$/, function () {
                         return element(by.model('second')).sendKeys('3'); // you can use return also
                      });
                  
                      this.When(/^I click Go button$/, function () {
                          return element(by.id('gobutton')).click();
                      });
                  
                      this.Then(/^Result should be displayed as Five$/, function () {
                          return element(by.repeater('result in memory')).all(by.tagName('td')).get(2).getText().then(function(text){
                          expect(text).to.equal('5');
                          });
                  
                      });
                  
                  };
                  

                  我建议你阅读Promises http://www.html5rocks.com/en/tutorials/es6/promises/ 因为它需要一些了解它们的行为方式.它们有时可能很棘手,我花了一段时间才得到一个想法,但我还有很多东西要学:)

                  I would recommend you to read about Promises http://www.html5rocks.com/en/tutorials/es6/promises/ as it requires some understanding how they behave.They can be sometimes tricky, it took me a while to get an idea still I have lot to learn :)

                  这篇关于Protractor Cucumber BDD 测试在执行前显示通过的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

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

                  相关文档推荐

                  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 测试登录重定向)
                  Explain about async/ await in Protractor(解释 Protractor 中的 async/await)
                  Protractor browser.wait doesn#39;t wait(量角器 browser.wait 不等待)
                  How to use Protractor with Angular 2?(如何在 Angular 2 中使用量角器?)
                    <i id='3ICtg'><tr id='3ICtg'><dt id='3ICtg'><q id='3ICtg'><span id='3ICtg'><b id='3ICtg'><form id='3ICtg'><ins id='3ICtg'></ins><ul id='3ICtg'></ul><sub id='3ICtg'></sub></form><legend id='3ICtg'></legend><bdo id='3ICtg'><pre id='3ICtg'><center id='3ICtg'></center></pre></bdo></b><th id='3ICtg'></th></span></q></dt></tr></i><div id='3ICtg'><tfoot id='3ICtg'></tfoot><dl id='3ICtg'><fieldset id='3ICtg'></fieldset></dl></div>
                        <tbody id='3ICtg'></tbody>
                    • <small id='3ICtg'></small><noframes id='3ICtg'>

                          <bdo id='3ICtg'></bdo><ul id='3ICtg'></ul>

                          <legend id='3ICtg'><style id='3ICtg'><dir id='3ICtg'><q id='3ICtg'></q></dir></style></legend>

                        • <tfoot id='3ICtg'></tfoot>