Огурец Webdriverio не может использовать обещания

Я пытаюсь изучить немного больше огурцов с помощью webdriverIO, и у меня возникают некоторые проблемы при запуске моих тестов.

На самом деле, я хочу рассказать об этой простой функции:

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(callback)
  • Если я обхожу предыдущую точку, добавляя callback() сразу после .url(arg1) , я перехожу к следующей точке
  • В первом случае Then ни первое решение, ни второе не работают. Пока я пытаюсь зарегистрировать значение const title, у меня есть ожидающее обещание. Но когда я пытаюсь выполнить это обещание (второй случай), я ничего не регистрирую (даже в случае отказа).

Ограничения

  • Я не хочу использовать wdio
  • Я использую селен 2.53
  • Я использую огурецjs 1.3.1
  • Я использую webdriverio 4.4.0
  • Я использую Nodejs v4.6.0

РЕДАКТИРОВАТЬ: у меня всегда проблемы с тайм-аутом


person mfrachet    schedule 29.11.2016    source источник


Ответы (1)


Используйте chimpjs. Он объединяет webdriverio, огурец и других друзей. Это «на оптоволокне», поэтому вы можете писать свои тесты в основном в синхронном стиле. Я использую его, и когда мне нужно использовать обещания, я могу или должен это делать.

person RedMage    schedule 20.12.2016