我正在尝试使用leadfoot模块进行实习和硒的功能测试。
对于此测试,我试图在一个地方单击一个按钮,然后检查页面上其他元素的显示属性。
我找不到扩展findById调用搜索的方法,所以我尝试使用会话属性,这似乎有用,但会导致所有内容都返回一个promise。
我发现的唯一方法就是通过链接函数来实现它。 是什么使会话(及其函数返回的元素)不同?
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
});
});
});
我确信我做了很多错事,所以我们都很感激所有建议。
答案 0 :(得分:4)
this.remote
对象是Command对象,而不是Session或Element对象。如果你想要一个Session你可以从this.remote.session
获得它,但通常不需要它,并且Session对象不可链接。
您的第二个findById
无法正常工作的原因是您没有end
ing过滤您之前findBy
次来电添加的内容。如果在查找操作后未调用end
,则任何后续查找操作都将使用上一个查找中的元素作为要搜索的根元素。
换句话说,当您运行this.remote.findById('a').findById('b')
时,它会搜索元素' b'在元素内部,而不是在整个文档this.remote.findById('a').end().findById('b')
内部搜索' a'和' b'在整个文件里面。
此外,每当您在回调中执行异步操作时,您需要return
操作的结果。如果不这样做,测试将不知道它需要等待更多操作才能完成。 return chaining还会阻止callback pyramids:
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
});