我正在尝试使用soda.js创建一个 node.js 脚本来组织和编写Selenium脚本。我遇到的问题是我根本不了解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将等待方法一。method3 将等待 method2() 等。为您提供同步的便利,但提供事件的功能。
我预计
open complete
and
and2
end
我明白了
and
and2
open complete
end
什么?它显然与and
方法有关,我认为它是在声明你自己的任意函数,但它似乎没有遵循队列顺序。正如您在测试用例中看到的,我尝试了两种声明 and 函数的方法,一种使用自执行函数闭包,另一种使用标准匿名函数。两种情况下的结果相同。我如何让and()
他们遵循队列顺序?