<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 测试在执行前显示通过

        时间:2023-06-15
        <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 测试在执行前显示通过的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:断言元素被聚焦 下一篇:控制 browser.wait() 的轮询频率(流利等待)

                  相关文章

                    <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>
                  1. <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>

                    1. <tfoot id='3ICtg'></tfoot>