2017-06-07 1 views
0

現在使用されているセレクタ(cssまたはxpath)を取得するカスタムコマンドを作成するために、here(nightwatchでpauseコマンド)の指示に従った。nightwatchカスタムコマンドプロトタイプ

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); 
    }) 

私はまた、hereは生憎運なしに、提案として「self.perform」と周りにラップしようとしています。

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

私は何が欠けていますか?

ありがとうございました!

答えて

0

「完全なイベントへの通知は、非同期アクション内で実行する必要があります」action"self.emit('complete');、Nightwatch homepageに従って。

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');は、ノードによって処理されているイベントループの次のダニによって呼び出されることを確認します。

関連する問題