我有一个包含3行数据和3个删除按钮的表.我想删除所有数据行,所以我试图在我的页面对象中编写一个方法来执行此操作...这应该是一个快照,但我不能让它工作.我正在尝试这样:
this.rows = element.all(by.repeater('row in rows'));
this.deleteAllFriends = function() {
this.rows.each(function(row) {
row.$('i.icon-trash').click();
})
};
Run Code Online (Sandbox Code Playgroud)
但这会引发错误:
Error: Index out of bound. Trying to access index:2, but locator: by.repeater("row in rows") only has 1 elements
Run Code Online (Sandbox Code Playgroud)
很明显,索引量角器预计接下来不再存在,因为它已被删除.我该如何解决这个问题?
这也不起作用并抛出相同的错误:
this.deleteButtons = $$('i.icon-trash');
this.deleteAllFriends = function() {
this.deleteButtons.each(function(button) {
button.click();
});
};
Run Code Online (Sandbox Code Playgroud)
这也行不通......
this.deleteAllFriends = function() {
while(this.deleteButton.isDisplayed()) {
this.deleteButton.click();
}
};
Run Code Online (Sandbox Code Playgroud) 我试图断言名称显示在表的列中.我编写了一个inResults
函数,它将迭代列的文本以查看是否存在名称.这是我正在尝试的:
页面对象:
this.names = element.all(by.repeater('row in rows').column('{{row}}'));
this.inResults = function(nameString) {
var foundit = '';
this.names.each(function(name) {
name.getText().then(function(it) {
console.log(it); // each name IS printed...
if(it == nameString) {
console.log('it\'s TRUE!!!!'); // this gets printed...
foundit = true;
}
});
});
return foundit; // returns '' but should be true?
};
Run Code Online (Sandbox Code Playgroud)
规格期望:
expect(friendPage.inResults('Jo')).toBeTruthy();
Run Code Online (Sandbox Code Playgroud)
两个控制台语句按预期打印...但我的期望失败,因为foundit
价值仍然存在''
.我已经尝试了很多方法而且都没有.我错过了什么?
在量角器中,如何处理重复内容,例如表格?例如,给定下面的代码,即踢出一个表3列:Index
,Name
并且Delete-Button
在每一行中:
<table class="table table-striped">
<tr ng-repeat="row in rows | filter : search" ng-class="{'muted':isTemp($index)}">
<td>{{$index+1}}</td>
<td>{{row}}</td>
<td>
<button class="btn btn-danger btn-mini" ng-click="deleteRow(row)" ng-hide="isTemp($index)"><i class="icon-trash icon-white"></i></button>
</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
在我的测试中,我需要根据给定的名称单击删除按钮.在Protractor中找到这个的最佳方法是什么?
我知道我可以抓取rows.colum({{row}})
文本,得到它的索引,然后点击button[index]
,但我希望有一个更优雅的解决方案.
例如,在Geb中,您可以将行定位器传递给模块,然后使用列指示符对每行进行切块.那个解决方案让我盯上了Protractors的地图方法......
给定多行用户表...
<tr>
<td class="cell--select">
<input class="choice__input" type="checkbox">
</td>
<td>
<div class="user">
<ul class="user-info">
<li class="name">Jane Doe</li>
</ul>
</div>
</td>
</tr><tr>
...
Run Code Online (Sandbox Code Playgroud)
我想选择具有给定用户名的行,然后单击该行上的复选框。我尝试了多种方法来做到这一点,包括withText
和/或parent()
和/或find()
等...,但没有任何效果。
通常,我会抓住所有的li.name
s,检查正确的名称,然后使用索引来检查正确的复选框,但是我也想不出一种方法来实现。
卡住...想法?