通过值断言 table 中的一行

Asserting a row in a table by a value

我目前正在为 Angular 应用程序开发一些端到端测试,我 运行 遇到了一些问题: 有一个 table,每一行在它的最后一个 td 中包含一个查看、编辑和删除按钮:

<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 我认为这里的解决方案很接近,但是嵌套函数让我感到困惑

您可以找到删除按钮检查 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();
}

你可以试试

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

您希望将 contains() 中的最后一个参数替换为所需的适当 function/ID 数字的位置。当你这样做时,你说 "find a button inside of a row that has ng-click with a value including the substring 'update(ID#)' "

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