Как настроить транспортир для использования огурца

От 0.20.1 Теперь огурцы полностью поддерживаются в Protractor, но я боюсь найти любую документацию о том, как правильно ее настроить. Любая идея, как вы будете устанавливать world.js?

Я нашел этот пример в https://github.com/whyvez/angular-cucumber-example/blob/master/features/support/world.coffee, но я не уверен, что вам все равно нужно указать все требуемые модули и конфигурацию в качестве файла конфигурации транспортира (referenceConf.js) будет иметь всю эту информацию уже.

assert = require 'assert'
path = require 'path'

protractor = require 'protractor'
webdriver = require 'selenium-webdriver'

driver = new webdriver.Builder().
  usingServer('http://localhost:4444/wd/hub').
  withCapabilities(webdriver.Capabilities.chrome()).
  build()

driver.manage().timeouts().setScriptTimeout(100000)

ptor = protractor.wrapDriver driver

class World
  constructor: (callback) ->
    @browser = ptor
    @By = protractor.By
    @assert = assert
    callback()

module.exports.World = World

Ответ 1

Я создал образец проекта, чтобы показать, как настроить транспортир с огурцом и использовать мир.

Мир - это место, где можно разделить общие черты между различными сценариями, чтобы вы могли поддерживать организованный код.

На самом деле все, что вам нужно, это создать файл world.js в папке с именем /support под/features. Вы также разместите там свои крючки. Каждое свойство или функция будут доступны в ваших определениях шагов.

world.js:

module.exports = function() {

  this.World = function World(callback) {
    this.prop = "Hello from the World!";

    this.greetings = function(name, callback) {
      console.log("\n----Hello " + name);
      callback();
    };

    callback();
}

И затем в ваших шагах:

var sampleSteps = function() {

    this.Given(/^this is the first sample$/, function (callback) {
      console.log("\n----" + this.prop);
      callback();
    });

    this.Given(/^this is the second sample$/, function (callback) {
      this.greetings("everybody", callback);
    });

};

module.exports = sampleSteps;

Файл конфигурации protractor.js будет выглядеть примерно так:

exports.config = {

  specs: [
    'e2e/features/*.feature'
  ],

  capabilities: {
    'browserName': 'chrome'
  },

  baseUrl: 'http://localhost:8081/',

  framework: 'cucumber',

};

Это хранилище GitHub.

https://github.com/plopcas/st-protractor-cucumber

Надеюсь, что это поможет.

Ответ 2

Взгляните на protractor-cucumbe - он поставляется с selenium-webdriver, поддерживает Promises и хорошо документирован.

Кажется, что требуется минимальная конфигурация, и требуется то, что требуется документально.

Ответ 3

Я получил хорошее облегчение от этой установки

  class ChtWorld
    chai = require('chai');
    chaiAsPromised = require('chai-as-promised');

    constructor:  ->
      @browser = @protractor = require('protractor').getInstance()
      @By = @protractor.By
      chai.use(chaiAsPromised)
      @expect= chai.expect


  module.exports= ->
    this.World= (callback) ->
      w = new ChtWorld()
      callback(w)

Поскольку транспортир уже настроен, достаточно получить ссылку на него достаточно (обратите внимание, что для того, чтобы Cucumber правильно загрузил новый мир, modules.exports должен быть прав).

В качестве побочной заметки это расположено в функциях /support/world.coffee, и явно не добавлено в список "требует" (попытка сделать это заставила меня заблудиться в проблемах с ошибками Лексинга).

Ответ 4

Добавьте его в качестве структуры в файле конфигурации:

exports.config = {
  // set to "custom" instead of cucumber.
  framework: 'custom',

  // path relative to the current config file
  frameworkPath: 'protractor-cucumber-framework'

  // relevant cucumber command line options
  cucumberOpts: {
    format: "summary"
  }
};

Дополнительная информация здесь: Рамки-манифольды