我正在尝试替换input
字段中的文字。鉴于原始文本foo
,我尝试将其替换为bar
。
在大多数情况下,这可以按预期工作,但间歇性地我发现结果可能是foobar
,fooar
,foor
甚至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)
有没有其他方法可以确保文本在尝试替换之前是可变的?
答案 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。