Seleniumスクリプトを整理および作成するために、 soda.jsを使用して node.js スクリプトを作成しようとしています。私が直面している問題は、 soda.jsチェーンの哲学を根本的に理解していないことです。特に、メソッドとドキュメントは、それがどのように機能するかを説明するのに非常に弱いです。and()
次のテスト ケースを想像してください。
var soda = require('soda');
var assert = require('assert');
var browser = soda.createClient({
host: 'localhost',
port: 4444,
url: 'http://www.google.com',
browser: 'firefox'
});
browser
.chain
.session()
.open("http://www.google.com", function() {
console.log("open complete");
})
.and(function() {
console.log("and");
})
.and(function() {
return function(browser) {
console.log("and2");
}
}())
.end(function() {
console.log("end");
})
チェーン API についての私の理解は、それがコールバック地獄を防ぐことであるということでした。したがって、browser.method1().method2().method3() を呼び出すとします。その後、method2 はメソッド 1 を待ちます。method3 は method2() などを待機します。同期の容易さを提供しますが、イベントの機能を提供します。
私が期待する
open complete
and
and2
end
私は得る
and
and2
open complete
end
何?それは明らかにand
、独自の任意の関数を宣言していると思われるメソッドと関係がありますが、キューの順序に従っているようには見えません。テスト ケースでわかるように、and 関数を宣言する 2 つの方法を試しました。1 つは自己実行関数クロージャを使用し、もう 1 つは標準の無名関数を使用します。どちらの場合も同じ結果です。and()
キューの順序に従うようにするにはどうすればよいですか?