将变量存储在实习功能测试中

时间:2013-12-05 17:11:33

标签: intern

如何在实习功能测试中存储一个可用于查找其他元素的元素的值?

例如,我有以下测试片段:

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()上下文中。

感谢。

1 个答案:

答案 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()
    });