繁体   English   中英

当我解决它并改变页面(量角器测试)时,保证继续工作

[英]promise keep working when i resolve it and change page (protractor test)

我有一个表行,我想点击具有特定标签(测试服务器标签)的行中的编辑按钮, 我要点击它的一行

这是我的代码:

public selectOnRow( textSelector:string , clickableSelector : string , value:string) {
    let promise = new Promise(resolve => {
        element.all(by.css(textSelector)).each((elem, i) => {
            elem.getText().then(function (text) {
                if (text === value) {
                    resolve(i);
                }
            });
        });
    });
    promise.then(i => {
        element.all(by.css(clickableSelector)).get(i).click();

    })
}

我称之为:

beforeAll(async () => {
            page = new AppPage;
            page.navigateTo('/asset/server');
            page.selectOnRow('.column-label div', '.edit-action-btn', 'test server label')
            baseUrl = page.baseUrl;
        });

问题是它点击了正确的行但是当页面被更改时仍然selectOnRow正在工作并循环那些不在新页面中的行! 我收到此错误:

失败:陈旧元素引用:元素未附加到页面文档

ElementFinderArray过滤功能

这可能是对element.all的过滤函数的一个很好的用法。 当我们调用filter函数时,返回带有boolean或承诺为boolean的truthy的元素会被添加到ElementFinderArray ElementFinderArray也是element.all将返回的相同类型的对象。

单击其中一个元素

当文本匹配时,我们在文本匹配时设置变量索引。 仅在索引为空时设置索引值。 接下来我们将等待过滤功能完成。 然后,我们单击带有index值的clickableSelector

等待异步方法

最后要做的是在selectOnRow上返回整个promise。 所以你可以调用await selectOnRow(textSeector, clickableSelector, value);

代码段

public selectOnRow(textSelector:string, clickableSelector: string, value: string) {
    let index: number;
    return element.all(by.css(textSelector)).filter((elem, i) => {
      return elem.getText().then(text => {
        // test if index is not set
        // also, if the text matches, update the index
        if (!index && text === value) {
          index = i;
        }
        return text === value;
      });
    }).then(() => {
      // wait for the filter function to complete
      // at this point, the index should be set.
      return element.all(by.css(clickableSelector)).get(index).click();
    });
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM