无法将密钥发送到chrome中的字段(在firefox中相同的代码正常工作)

时间:2015-10-14 04:25:49

标签: google-chrome selenium-webdriver protractor

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毫秒

请帮帮我

2 个答案:

答案 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'))