Leadfoot 会话对象 returns 承诺

Leadfoot session object returns promises

我正在尝试使用 leadfoot 模块对实习生和 selenium 进行功能测试。

对于此测试,我尝试单击一个位置的按钮,然后检查页面其他位置的元素的显示 属性。

我找不到扩展 findById 调用搜索的方法,所以我尝试使用会话 属性,这似乎有效,但结果是 return .

我发现使它起作用的唯一方法是链接 then 函数。 是什么让会话(及其元素的功能 return)不同?

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
            });
        });

    });

我确定我做错了很多事情,所以任何和所有的建议都将不胜感激。

this.remote 对象是 Command object, not a Session or Element 对象。如果您想要一个 Session,您可以从 this.remote.session 获得它,但通常不需要,而且 Session 对象不可链接。

你的第二个 findById 不起作用的原因是你没有 ending 过滤你在之前的 findBy 调用中添加的。当您在查找操作后不调用 end 时,任何后续查找操作都将使用前一个查找中的元素作为要搜索的根元素。

换句话说,当您 运行 this.remote.findById('a').findById('b') 时,它会在元素 'a' 中搜索元素 'b',而不是在整个文档 [=18= 中搜索] 将在整个文档中同时搜索 'a' 和 'b'。

此外,任何时候从回调中执行异步操作时,您都需要 return 操作的结果。如果不这样做,测试将不知道它需要等待更多操作完成。 return 链接也会阻止 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
    });