Прототип настраиваемой команды 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.