量角器:等待文本可变

时间:2017-04-18 14:05:32

标签: angular selenium protractor

我正在尝试替换input字段中的文字。鉴于原始文本foo,我尝试将其替换为bar

在大多数情况下,这可以按预期工作,但间歇性地我发现结果可能是foobarfooarfoor甚至foo的问题。这似乎意味着当我的sendkeys()开始执行时,文本有时处于不可变状态,然后在执行sendkeys()时变为可变部分。

我尝试使用clear()清除sendkeys()之前的输入,但行为没有改变,clear()在某些情况下根本无法删除原始文本。我还尝试等待原始文本显示在input中,并等待input变为可点击,然后在调用sendkeys()之前点击它。同样,这些并不会改变原来的行为。

这是我的input

<input qva-select="" qv-enter="toggleEditMode()" type="text" maxlength="255" class="lui-input details-input ng-pristine ng-valid ng-not-empty ng-valid-maxlength ng-touched" ng-model="appModel.qTitle"> == $0

原始量角器代码很简单:

titleInput: this.element(this.by.model('appModel.qTitle'))

titleInput.sendKeys('bar')

这就是我现在所拥有的一系列等待条件和其他尝试修复:

browser.wait(EC.textToBePresentInElementValue(titleInput, 'foo'), 60000)
browser.wait(EC.elementToBeClickable(titleInput), 60000)
titleInput.click()
titleInput.sendKeys(protractor.Key.CONTROL, 'a', protractor.Key.NULL, 'bar', protractor.Key.ENTER)

有没有其他方法可以确保文本在尝试替换之前是可变的?

2 个答案:

答案 0 :(得分:3)

我认为您可以通过重复发出.clear()方法调用自定义等待来使事情更可靠,并且仅在输入变空或达到超时时停止:< / p>

var titleInput = this.element(this.by.model('appModel.qTitle'));

browser.wait(function () {
    titleInput.clear();
    return titleInput.getAttribute('value').then(function (inputValue) {
        return !inputValue;
    });
}, 5000);

答案 1 :(得分:0)

感谢大家的投入!这绝对是Angular应用程序本身的时间问题,而不仅仅是我错误地使用了Protractor。