0

http://theintern.io/:在功能测试中查找 dojo 生成的小部件 id 的最佳方法是什么,我应该使用webdriver“elementBy...”方法还是“dijit/registry”“dojo/query”

目前,我正在使用 dijit 注册表遍历所有小部件,直到通过标签值或属性等标识符找到我感兴趣的小部件。但要做到这一点,我只是在迭代这个registry.toArray()集合,感觉有点粗糙。

例如

return this.remote.get(url)
    .execute(function(){
        // return the id of a widget by matching label text
        var widgetId = null;
        require(["dijit/registry"], function(registry){
            for (var i = 0; i < registry.toArray().length; i++){
                if (registry.toArray()[i].label && registry.toArray()[i].label === "someLabelText"){
                    widgetId =  registry.toArray()[i].get("id");
                    break;
                }
            }
        });
        return widgetId;
    })
    .elementById(id)
        .click()
        .end()
    .then(function(){
        //assert something
    })

更新

目前,正在测试的应用程序避免在其页面元素上设置 id,因为使用了多个相同类型的小部件。因此通过其他方式找到它们更难,但我已经通过上面的示例和使用 dojo/query 来管理它,当然我可以使用 xpath。上面的例子是一个粗略的例子,我可以把搜索范围缩小一点。

我只是想知道人们对查找页面元素有什么想法,我一直专注于小部件 ID,但查找任何属性都会有所帮助。例如,也许有一个 Intern 插件可以查找文本?

4

2 回答 2

0

您是否因为不知道在哪里查找而搜索每个小部件,或者您想将更改应用于具有某些属性的所有小部件?如果是这样,那么您可以使用 dojo/query ( http://dojotoolkit.org/reference-guide/1.9/dojo/query.html ) 来查找您要查找的项目,然后您可以使用注册表检索小部件。 byId(id)

于 2014-03-21T20:05:26.590 回答
0

如果您想查看所有小部件并禁用它们,我发现效果最好,例如,您可以执行以下操作并且不需要知道它们的 ID 或类型,除非您将这些信息用于特定目的,如下所示。

array.forEach(registry.toArray(), function(item, i) {
if(item.type != undefined && item.id != 'yourItem')
    item.set('disabled', true);
});
于 2014-11-03T21:52:53.883 回答