我需要单击三次按钮(这将使用下面给出的html代码放弃三个文本框),然后在出现的每个文本框中提供不同的值。
该代码用于单击三次
for (var i = 0; i < 3; i++) {
element(by.id('protractor-type')).click();
};
然后出现三个文本框。
文本框的html代码是
<input type="text" required="" ng-model="config.eTypes[$index]" ng-change="updateEySettings()" class="form-control ng-pristine ng-invalid ng-invalid-required ng-touched" placeholder="Eg: Dancing" tabindex="0" aria-required="true" aria-invalid="true">
我可以使用代码将值仅提供给一个文本框
element(by.model('config.eTypes[$index]')).sendKeys('1st box');
但是我也需要在其他文本框中提供值。
我尝试做这样的尝试失败
element.all(by.repeater('type in config.eTypes track by $index')).then(function(arr){
arr[0].sendKeys('cat');
arr[1].sendKeys('ball');
arr[2].sendKeys('bat');
});
请提出适当且正确的做法。
最佳答案
要迭代量角器中的某些内容,请使用可靠的功能。 for()
循环通常比量角器单击按钮快得多。就是这样 -
for (var i = 1; i <= 3; i++) {
clickBtn(i);
}
function clickBtn(val){
element(by.id('protractor-type')).click();
//Assert the presence of the element that you want to verify on clicking of button. Here's a custom wait() function.
browser.wait(function(){
return element.all(by.model('config.eTypes[$index]')).then(function(arr){
return arr.length === val;
});
});
//You can send values to the input here if required.
};
这将单击按钮3次,并验证每次单击都会创建3个输入元素。您可以使用
.all()
函数发送值,而我在元素上看不到ng-repeat
属性,因此无法使用by.repeater
。就是这样 -element.all(by.model('config.eTypes[$index]')).then(function(arr){
arr[0].sendKeys('cat');
arr[1].sendKeys('ball');
arr[2].sendKeys('bat');
});
希望能帮助到你。
关于javascript - 在 Protractor 中,我们如何迭代并为其中带有$ index的 Angular 模型赋予不同的值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34678292/