HTML代码
<textarea type="text" name="pos_description" rows="4" class="form-control ng-pristine ng-invalid ng-invalid-required ng-valid-minlength ng-valid-maxlength ng-touched" id="pos_description" placeholder="Enter Description" ng-model="data.description" minlength="150" maxlength="5000" required="">
</textarea>
我的代码
browser.executeScript('window.scrollTo(0,250);');
browser.sleep(3000);
element(by.model('textarea.data.description')).sendKeys("values");
我收到如下错误: -
StaleElementReferenceError:陈旧元素引用:元素不是 附在页面上
cument
(会话信息:chrome = 43.0.2357.132)(驱动程序信息: chromedriver = 2.15.322448 (52179c1b310fec1797c81ea9a20326839860b7d3),平台= Linux的 3.13.0-55-generic x86_64)(警告:服务器未提供任何堆栈跟踪信息)命令持续时间或超时:45毫秒
请帮帮我
答案 0 :(得分:1)
这可能主要是因为页面未正确加载。页面可能已加载,但页面中的某些元素可能会加载,从页面中消失一小段时间然后再次加载。因此,当加载页面时,Selenium会找到文本区域,并且在尝试单击时,元素可能已重新加载。
在量角器中尝试catch [Java]等效项来捕获异常并再次找到该元素并再次单击。
try {
element(by.model('textarea.data.description')).sendKeys("values");
} catch (StaleElementReferenceError e) {
element(by.model('textarea.data.description')).sendKeys("values");
}
我不知道在Protractor中这是可能的。如果不是,你总是可以增加睡眠时间。
答案 1 :(得分:0)
你的html看起来像这样:ng-model =“data.description” 但你这样做:元素(by.model('textarea.data.description'))
它应该是:element(by.model('data.description'))