2

如何在 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()上下文中存储值。

谢谢。

4

1 回答 1

1

所有remote方法都是非阻塞的,并在调用测试函数时立即执行。mainItemId直到执行第 4 个命令后才设置。如果您需要执行以从先前命令检索的数据为条件的查询,则需要在回调中执行此操作:

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()
    });
于 2013-12-05T19:16:01.373 回答