通过值在表中断行

时间:2015-03-16 09:38:46

标签: angularjs protractor

我目前正在为Angular App开发一些e2e测试,但我遇到了一些问题: 有一张桌子,每一行都包含一个视图,编辑和删除按钮,其中最后一个是这样的:

<td>
<button ng-click="credentialDetail({id:credential.id})"/>
<button ng-click="update(credential.id)"/>
<button ng-click="delete(credential.id)"/>
</td>

每行包含一个值,该值是显示对象的ID。有没有办法让量角器单击正确行中的按钮?我试过以下但没有成功。

this.deleteCredential = (function(externalId){
    $$('tr').each(function(rowElm, r) {
        // Traverse cols
        rowElm.$$('td').each(function(cellElm, c) {
            // Workout cell
            if (cellElm.getText() === externalId){

            }
        });
    });
});

P.S。 我确实看过以下问题: How to handle table data in Protractor 我认为这里的解决方案很接近,但嵌套函数让我困惑

2 个答案:

答案 0 :(得分:1)

您可以找到检查ng-click属性的删除按钮以delete开头。然后,使用evaluate()评估credential.id并检查其价值。

示例(找到delete按钮):

this.deleteCredential = (function(externalId) {
    var deleteButtons = element.all(by.css('table td button[ng-click^=delete]')).filter(function (button) {
        return button.evaluate('credential.id').then(function (id) {
            return (id === externalId);
        });
    });

    deleteButtons[0].click();
}

答案 1 :(得分:0)

您可以尝试类似

的内容

var someCell = element(by.xpath("//td/button[contains(@ng-click, 'update(ID#)')] "))
someCell.click()

您希望将contains()中的最后一个arg替换为所需的相应函数/ ID号。当你这样做时,你会说“在一行中找到一个按钮,其中包含一个包含子字符串'更新(ID#)'的值的ng-click”

如果您想要对属性值进行不同的比较,也可以使用matches()等。有关详情,请参阅https://developer.mozilla.org/en-US/docs/Web/XPath/Functions