2017-04-18 88 views
2

我试图在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) 

有没有其他方法可以确保文本在尝试r之前是可变的放置它?

+0

不,它不会出错,它会继续执行,就好像它成功了一样。 –

+0

我认为你的问题的根本原因是'输入'的qv-enter =“toggleEditMode()”属性。我一直未能在网上找到太多内容(似乎与Qlik View有某种关系),但名称暗示它负责阻止任何输入,直到满足某些条件。由于这是另一个框架,量角器无法知道它应该等待这个脚本完成。看来自定义等待是唯一的出路。如果你可以提供''toggleEditMode'函数的内部知识,那么肯定会有帮助。 –

+0

该属性仅处理在输入中输入“return”字符的情况。然后它将页面切换回“只读”。我不相信它在这里发生的事情中发挥作用。 –

回答

3

我觉得你可以让事情变得更可靠由具有定制等待会反复发出.clear()方法调用和停止,只有当输入为空或达到超时:

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

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

谢谢@alecxe。我一直在考虑这一点,但理想情况下,我也想首先明白问题所在:) –

+0

这没有奏效。 我想也许有一段时间,当输入呈现没有文字,所以我添加了以下内容,但仍然没有运气。 ' var titleInput = this.element(this.by.model('appModel.qTitle')); browser.wait(function(){ return titleInput.getAttribute('value')。然后(函数(inputValue){return valueValue; }); 5000); browser.wait(函数(){ titleInput.clear();返回 titleInput.getAttribute( '值'),然后(函数(inputValue的){ inputValue的回报;! });} ,5000); ' –

+0

@鲍勃啊,有趣!如果你尝试慢慢打字会怎样(http://stackoverflow.com/questions/38187514/simulate-slow-typing-in-protractor)? – alecxe

0

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