重用函数来定位和过滤量角器中的元素

时间:2016-09-02 14:43:57

标签: protractor

我一直在使用量角器来测试Angular和非角度Javascript应用程序。

在处理复杂的应用程序时(即使它是单页应用程序),将一些复杂的搜索分解为被探测的非常有用的功能。

让我们说我想要一张桌子。所以我有一个方法来查找表中的所有行:

getAllRows(){
        return element.all(by.css('table > tbody > tr'));
}

(为了简单起见,我选择了一个非常简单的例子)

好。 getAllRows()函数/方法应该返回一个ElementFinder的Promise,适用于对element()或all()的后续调用。

所以在过去(意味着旧版本的量角器)我能够完美地做到这一点:

 getRowsWithTitle(title){
        return this.getAllRows() //Delegated search to a method.. 
          .filter((e,i) => {     // And filter results here
            return e.element(by.css('td:nth-child(1)')
                .getText()
                .then( text => {
                    return String(text) === String(title);
                })
        });
    }

你可以看到我正在为我的第一个方法链接一个调用来获取表中的所有行,然后附加一些其他选择器或过滤以缩小搜索范围。

此外,我能够进行第三次电话会议

myPage.getRowsWithTitle('some title').click(); 

找到我的手机并接收点击事件......

(可悲)不再有效

使用当前版本的Protractor,我不得不重复我的" getAllRows()"任何其他方法内的方法。

想象一下我为以下任何一种编写PageObject方法: - 从表格中的某个单元格中获取文本 - 从单元格内的下拉列表中选择值 - 将文本写入单元格 - ......表格中每种可能的操作都有大量的方法。

有了这个新行为,我被强制执行REPEAT逻辑,否则用更简单的方法包含。使整个事情几乎不可能完成。

有人可以解释我为什么他们改变了行为,如果有一些合适的解决方法?否则我将不得不停止使用量角器并选择其他东西,失去所有经验教训并完全浪费我的时间。

非常失望。

0 个答案:

没有答案