如何使用由$ index创建的ng-repeat轨道创建的量角器来选择元素?

时间:2016-05-30 05:05:18

标签: angularjs protractor

我需要选择ng-repeat创建的文本框,并使用sendKeys函数发送一些值。但我不确定选择文本框的方法。请建议一种方法来完成此操作或者我应该使用css选择器。

<div class="qst_input_hld ng-scope" ng-repeat="option in options track by $index">
<input type="text" class="input-sm ng-pristine ng-valid" ng-model="options[$index]" placeholder="Option 1" ng-class="isOptionEmpty[$index] ? 'error-border' : ''">
<!-- ngIf: $index > 1 -->
</div>

2 个答案:

答案 0 :(得分:4)

有多种方法可以找到文本输入,因为那里有转发器,我怀疑有多个文本框。假设您要将密钥发送到第一个密钥,这里有一个选项:

var desiredInput = element.all(by.repeater("option in options")).first().all(by.tagName("input")).first();
desiredInput.sendKeys("desired text");

请注意,您根本不需要处理track by部分 - 它会被量角器(source code reference)剥夺。

另请注意,我刚刚使用by.tagName()技术可能会或可能不会有效,具体取决于您是否有其他input元素。您可以更严格并使用 CSS选择器,例如检查占位符:

var desiredInput = element.all(by.repeater("option in options")).first().$('input[placeholder="Option 1"]');

并且,如果要为转发器中的每个项目的输入元素发送密钥,请使用each()

element.all(by.repeater("option in options")).each(function (elm) {
    var desiredInput = elm.$('input[placeholder="Option 1"]');
    desiredInput.sendKeys("desired text");
});

答案 1 :(得分:0)

为文本框提供名称和ID属性:

UPDATE Material
    SET Value = @Value,
        Format = @Format,
        SValue = @SValue,
        CGroup = @CGroup
WHERE 
    SM = @SM
    AND Characteristic = @Characteristic

如果你想选择所有文本框:

<input ... name="your_textbox" id="textbox_{{index}}" />

特定文本框:

document.getElementsByName("your_textbox");

通过量角器: 首先将输入框的ng模型更改为:

document.getElementById("textbox_"+i);   //i=index

然后使用模型选择它:

<input type="text" class="input-sm ng-pristine ng-valid" ng-model="option" placeholder="Option 1" ng-class="isOptionEmpty[$index] ? 'error-border' : ''"> <!-- see ng-model=option -->