Прототип настраиваемой команды nightwatch

Я следовал этой инструкции (команда pause в nightwatch), чтобы создать собственную команду, которая получает текущий используемый селектор (css или xpath).

var util = require('util');
var events = require('events');

function GetSelector() {
    events.EventEmitter.call(this);
}

util.inherits(GetSelector, events.EventEmitter);

GetSelector.prototype.command = function (callback) {
    callback(this.client.locateStrategy);
};

module.exports = GetSelector;

Реализация получает текущий селектор, хотя программа застряла при вызове пользовательской команды.

  browser
    .getSelector(function (currentSelector) { 
      console.log('getSelector: ' + currentSelector); 
    })

Я также попытался обернуться "self.perform", как предложено здесь, к сожалению, без какой-либо удачи.

GetSelector.prototype.command = function (browser, callback) {
    browser.perform(function () {
        callback(this.client.locateStrategy);
    })
};

Что мне не хватает?

Заранее спасибо!

1 ответ

Решение

"Сигнализация о полном событии должна быть выполнена внутри асинхронного действия" action"self.emit('complete');Согласно домашней странице Nightwatch.

GetSelector.prototype.command = function (cb) {
    var self = this;

    process.nextTick(function () {
        cb(self.client.locateStrategy);

        //Signaling the complete event needs to be done inside an asynchronous action.
        self.emit('complete');
    });

    return this;
};

process.nextTick гарантирует, что self.emit('complete'); будет вызван следующей галочкой цикла событий, которые обрабатываются Node.

Другие вопросы по тегам