在我的测试代码中,我希望实现以下目标:
it('Updates label text', function(done) {
page.testLabelText();
assert.equal(page.testLabelText().pageLabel, page.testLabelText().iFrameLabel);
done();
});
在我的页面对象中,这里是 testLabelText();
:
page.testLabelText = function () {
var pageLabel = function () {
return driver.findElement(By.css('#element')).getText().then(function(text) {
return text;
});
};
var iFrameLabel = function () {
return driver.findElement(By.css('#element')).getText().then(function(text) {
return text;
});
};
return {
pageLabel: pageLabel(),
iFrameLabel: iFrameLabel()
};
};
但是当打印到控制台时这会返回“未定义”...我是 javascript 的新手所以虽然我已经在常规 javascript 中管理它,但我尝试的一切都失败了 selenium WebdriverJS promises...
最佳答案
您的 assert.equal()
正在比较两个不同的 promise 对象,因此永远不会为真。要了解原因,请按以下步骤进行操作。您需要做的是在解决后从两个 promise 中获取值,然后比较这些值。
page.testLabelText();
本身只返回一个对象,因此在不分配返回值或引用返回值的情况下自行调用它不会执行任何操作。
page.testLabelText().pageLabel
本身就是一个 promise 。
page.testLabelText().iFrameLabel
本身就是一个 promise 。
而且,它们是不同的 promise 对象,因此您的 assert.equal()
不会为真。
如果你想比较 promise 的两个值,你必须这样做:
var obj = page.testLabelText();
Promise.all(obj.pageLabel, obj.iFrameLabel).then(function(results) {
assert.equal(results[0], results[1]);
done();
});
关于javascript - 使用 Webdriver 从嵌套 promise 返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41053887/