Leadfoot会话对象返回promise
Leadfoot session object returns promises
我正试图使用引线脚模块对intern和selenium进行功能测试。
对于这个测试,我试图单击一个地方的按钮,然后在页面的其他地方检查元素的显示属性。
我找不到扩展findById调用搜索的方法,所以我尝试使用session属性,它似乎有效,但结果一切都返回了promise。
我发现的唯一能让它工作的方法是链接then函数。是什么使会话(及其功能返回的元素)不同?
return this.remote
.findById('buttonContainer')
.findByClassName('buttonClass')
.click()
.session
.findById('stagePanel')
.then(function(element) {
element.findByClassName('itemList')
.then(function(element) {
element.getComputedStyle('display')
.then(function (display) {
// check display property
});
});
});
我确信我做错了很多事情,所以任何建议都很感激。
this.remote
对象是Command对象,而不是Session或Element对象。如果您想要一个Session,您可以从this.remote.session
获取它,但这通常不是必需的,而且Session对象是不可链接的。
您的第二个findById
不起作用的原因是,您没有对之前添加的findBy
调用进行end
筛选。如果在查找操作后未调用end
,则任何后续的查找操作都将使用上一次查找中的元素作为要在中搜索的根元素。
换句话说,当您运行this.remote.findById('a').findById('b')
时,它将在元素"a"内部搜索元素"b",而不是在整个文档内部。this.remote.findById('a').end().findById('b')
将在整个文档中搜索"a"answers"b"。
此外,任何时候从回调中执行异步操作时,都需要return
操作的结果。如果你不这样做,测试将不知道它需要等待更多的操作才能完成。返回链接还防止回调金字塔:
return this.remote
.findById('buttonContainer')
.findByClassName('buttonClass')
.click()
.end(2)
.findById('stagePanel')
.then(function(stagePanel) {
return stagePanel.findByClassName('itemList');
}).then(function(itemList) {
return itemList.getComputedStyle('display');
}).then(function (display) {
// check display property
});
相关文章:
- 如何从节点中的api promise返回对象
- 如何将从$promise返回的数据分配给全局变量
- Bluebird:运行promise返回函数序列
- 如何使用promise返回从递归AJAX调用构建的集合
- 如何正确编码promise返回函数
- 如何从Q节点promise返回变量
- 从Promise返回值
- Angularjs检查是否有2个promise返回
- Sequelize:如何访问[object Promise]或从Promise返回值
- 如何用chai断言从promise返回的json
- 将从节点promise返回的对象循环到下一个.then
- AngularJS异步请求方法服务使用promise返回数据
- 单元测试:在模拟promise返回来测试我的emit时遇到困难
- 从Promise返回值到Promise. all
- 为什么'new Promise(…)'返回& # 39;未定义# 39;
- AngularJS ajax http promise返回额外的数据
- AngularJS服务内部的promise返回值似乎会改变
- 定义一个NavigationInstruction,等待promise返回
- 如何使用promise返回数组的最终结果
- 在Promise返回函数中找到第一个成功