Webdriverio黄瓜不能使用promises

时间:2016-11-29 10:48:32

标签: javascript node.js gherkin webdriver-io cucumberjs

我正在尝试使用webdriverIO学习更多的cucjs,并且在启动测试时遇到了一些麻烦。

实际上,我想介绍这个简单的功能:

Feature: Example Feature
  In order to become productive
  As a test automation engineer
  I want to understand the basics of cucumber

  Scenario: My First Test Scenario
    Given I have open "https://google.com"
    Then the title should be "Google".
    And the bar should be empty.

通过这个测试:

const assert = require('assert');
module.exports = function() {
    this.Given(/^I have open "([^"]*)"$/, function(arg1, callback) {
      browser
        .url(arg1)
        .call(callback);
    });

    this.Then(/^the title should be "([^"]*)"\.$/, function(arg1, callback) {
      // First solution
      const title = browser.getTitle();
      assert(title, arg1);

      // Second solution
      browser
        .getTitle()
        .then(title2 => {
          assert(title2, arg1);
          callback();
        });
    });

    this.Then(/^the bar should be empty\.$/, function(callback) {
        // Write code here that turns the phrase above into concrete actions
        callback(null, 'pending');
    });
}

我的配置文件:

"use strict";

const WebDriverIO = require('webdriverio');
const browser = WebDriverIO.remote({
  baseUrl: 'https://google.com', // Or other url, e.g. localhost:3000
  host: 'localhost', // Or any other IP for Selenium Standalone
  port: 4444,
  waitforTimeout: 120 * 1000,
  logLevel: 'silent',
  screenshotPath: `${__dirname}/documentation/screenshots/`,
  desiredCapabilities: {
    browserName: process.env.SELENIUM_BROWSER || 'chrome',
  },
});

global.browser = browser;

module.exports = function() {
  this.registerHandler('BeforeFeatures', function(event, done) {
    browser.init().call(done);
  });

  this.registerHandler('AfterFeatures', function(event, done) {
    browser.end().call(done);
  });
};

我的问题

我的问题是:

  • 我从未传递 .call(回调)功能
  • 如果我通过在 .url(arg1)之后添加callback()来绕过前一点,我会转到下一个点
  • 在第一个 Then 中,第一个解决方案和第二个解决方案似乎都不起作用。当我尝试记录 const title 值时,我有一个待定的承诺。但是当我试图解决这个承诺(第二种情况)时,我从不记录任何东西(即使在拒绝的情况下)。

约束

  • 我不想使用wdio
  • 我使用的是硒2.53
  • 我使用的是cucumberjs 1.3.1
  • 我使用的是webdriverio 4.4.0
  • 我正在使用Nodejs v4.6.0

编辑:我总是遇到超时问题

1 个答案:

答案 0 :(得分:0)

使用chimpjs。它集成了webdriverio,黄瓜和其他朋友。它是“在光纤上”,因此您可以以同步方式编写测试。我使用它,当我必须使用我可以或需要的承诺时。