当另一个元素等于带有量角器和茉莉花的特定输入时,单击中继器内的一个元素
Clicking an element inside repeater when another element equals specific input with protractor and jasmine
我的HTML结构是这样的:
<li ng-repeat="m in members">
<div class="col-name">{{m.name}}</div>
<div class="col-trash">
<div class="trash-button"></div>
</div>
</li>
我想做的是使用量角器,当 m.name 等于特定值时单击垃圾桶。
我试过类似的东西:
element.all(by.repeater('m in members')).count().then(function (number) {
for (var i = 0 ; i < number ; i++) {
var result = element.all(by.repeater('m in members').row(i));
result.get(0).element(by.binding('m.name')).getAttribute('value').then(function (name) {
if (name == 'John') {
result.get(0).element(by.className('trash-button')).click();
};
});
};
});
这似乎应该有效,但是,我的函数似乎甚至没有 运行 这个。
我也研究了 promises 和 filters,但它们都没有成功。不断出错。
var array = element.all(by.repeater('m in members'));
array.filter(function (guy) {
guy.getText().then(function (text) {
return text == 'John';
})
}).then(function (selected) {
selected.element(by.className('trash-button')).click()
}
我只想在查找特定成员列表时点击相应的垃圾箱!
如有任何帮助,我们将不胜感激。
编辑:建议我在找到正确的元素后使用 xpath,这很好,问题是我无法获得过滤器函数让我使用 element(by.xpath...)
如果我尝试:
var array = element.all(by.repeater('m in members'));
array.filter(function (guy) {
guy.getText().then(function (text) {
return text == 'John';
})
}).then(function (selected) {
selected.element(by.xpath('following-sibling::div/div')).click()
}
我收到错误:
失败:对象没有方法'element'
想通了。遵循 API 参考中的 Protractor 过滤器指南并使用 alecxe 的 xpath 推荐,此代码将在过滤后点击您找到的任何元素。
element.all(by.className('col-name')).filter(function (member, index) {
return member.getText().then(function (text) {
return member === 'John';
});
}).then( function (elements) {
elements[0].element(by.xpath('following-sibling::div/div/')).click();
});
您可以将 xpath 更改为 select 不同的内容,以防您的 HTML 看起来不像我的。
看来可以不用repeater搜索,直接用by.binding
。找到您感兴趣的值后,获取 following sibling 并单击它:
element.all(by.binding('m.name')).then(function(elements) {
elements.filter(function(guy) {
guy.getText().then(function (text) {
return text == 'John';
})
}).then(function (m) {
m.element(by.xpath('following-sibling::div/div')).click();
});
});
或者,纯 xpath 方法可以是:
element(by.xpath('//li/div[@class="col-name" and .="John"]/following-sibling::div/div')).click();
我的HTML结构是这样的:
<li ng-repeat="m in members">
<div class="col-name">{{m.name}}</div>
<div class="col-trash">
<div class="trash-button"></div>
</div>
</li>
我想做的是使用量角器,当 m.name 等于特定值时单击垃圾桶。
我试过类似的东西:
element.all(by.repeater('m in members')).count().then(function (number) {
for (var i = 0 ; i < number ; i++) {
var result = element.all(by.repeater('m in members').row(i));
result.get(0).element(by.binding('m.name')).getAttribute('value').then(function (name) {
if (name == 'John') {
result.get(0).element(by.className('trash-button')).click();
};
});
};
});
这似乎应该有效,但是,我的函数似乎甚至没有 运行 这个。
我也研究了 promises 和 filters,但它们都没有成功。不断出错。
var array = element.all(by.repeater('m in members'));
array.filter(function (guy) {
guy.getText().then(function (text) {
return text == 'John';
})
}).then(function (selected) {
selected.element(by.className('trash-button')).click()
}
我只想在查找特定成员列表时点击相应的垃圾箱!
如有任何帮助,我们将不胜感激。
编辑:建议我在找到正确的元素后使用 xpath,这很好,问题是我无法获得过滤器函数让我使用 element(by.xpath...)
如果我尝试:
var array = element.all(by.repeater('m in members'));
array.filter(function (guy) {
guy.getText().then(function (text) {
return text == 'John';
})
}).then(function (selected) {
selected.element(by.xpath('following-sibling::div/div')).click()
}
我收到错误:
失败:对象没有方法'element'
想通了。遵循 API 参考中的 Protractor 过滤器指南并使用 alecxe 的 xpath 推荐,此代码将在过滤后点击您找到的任何元素。
element.all(by.className('col-name')).filter(function (member, index) {
return member.getText().then(function (text) {
return member === 'John';
});
}).then( function (elements) {
elements[0].element(by.xpath('following-sibling::div/div/')).click();
});
您可以将 xpath 更改为 select 不同的内容,以防您的 HTML 看起来不像我的。
看来可以不用repeater搜索,直接用by.binding
。找到您感兴趣的值后,获取 following sibling 并单击它:
element.all(by.binding('m.name')).then(function(elements) {
elements.filter(function(guy) {
guy.getText().then(function (text) {
return text == 'John';
})
}).then(function (m) {
m.element(by.xpath('following-sibling::div/div')).click();
});
});
或者,纯 xpath 方法可以是:
element(by.xpath('//li/div[@class="col-name" and .="John"]/following-sibling::div/div')).click();