我需要单击三次按钮(这将使用下面给出的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/

10-12 22:24