如何在实习功能测试中存储一个可用于查找其他元素的元素的值?
例如,我有以下测试片段:
var mainItem = "Menu 1";
var subItem = "Sub Menu 1";
var mainItemId = "";
return this.remote
.elementByXPath("//*[contains(text(),'" + mainItem + "')]/ancestor::*[@dojoattachpoint='focusNode']")
.getAttribute("id")
.then(function(id){ mainItemId = id; })
.clickElement()
.end()
.wait(500)
.then(function(){ console.log(mainItemId); })
.elementByXPath("//*[contains(text(),'" + subItem + "')][ancestor::*[@dijitpopupparent='" + mainItemId + "']]")
.clickElement()
.end()
基本上,当我运行测试时,mainItemId
值将正确记录,但第二个elementByXPath
将无法找到。如果我使用相同的值初始化mainItemId
,则xpath有效。根据我所看到的情况,它就好像mainItemId
只会将值存储在.then()
上下文中。
感谢。
答案 0 :(得分:1)
所有remote
方法都是非阻塞的,并在调用测试函数时立即执行。直到执行第4个命令后才设置mainItemId
。如果需要执行以从早期命令检索的数据为条件的查询,则需要在回调中执行此操作:
var mainItem = "Menu 1";
var subItem = "Sub Menu 1";
var mainItemId = "";
var remote = this.remote;
return remote
.elementByXPath("//*[contains(text(),'" + mainItem + "')]/ancestor::*[@dojoattachpoint='focusNode']")
.getAttribute("id")
.then(function(id){ mainItemId = id; })
.clickElement()
.end()
.wait(500)
.then(function(){
return remote.elementByXPath("//*[contains(text(),'" + subItem + "')][ancestor::*[@dijitpopupparent='" + mainItemId + "']]")
.clickElement()
.end()
});