我目前正在为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 我认为这里的解决方案很接近,但嵌套函数让我困惑
答案 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