4

使用 element(by.model()) 语法查找字段并输入文本。

element(by.model('sample_ad.id')).sendKeys('batman');

从 chromedriver 获取异常:

Stacktrace:
     Error: Timed out waiting for Protractor to synchronize with the page after 11 seconds
    at Error (<anonymous>)
==== async task ====
WebDriver.executeScript()
    at Protractor.waitForAngular (/Users/jon/dev/project_name/node_modules/protractor/lib/protractor.js:278:22)
    at Protractor.findElement (/Users/jon/dev/project_name/node_modules/protractor/lib/protractor.js:427:8)
    at Object.elementFinder.(anonymous function) [as sendKeys] (/Users/jon/dev/project_name/node_modules/protractor/lib/protractor.js:62:21)
    at null.<anonymous> (/Users/jon/dev/project_name/test/e2e/features/somedirectiveSpec.js:24:39)
    at /Users/jon/dev/project_name/node_modules/protractor/jasminewd/index.js:54:12
==== async task ====
    at null.<anonymous> (/Users/jon/dev/project_name/node_modules/protractor/jasminewd/index.js:53:12)
    at null.<anonymous> (/Users/jon/dev/project_name/node_modules/protractor/node_modules/minijasminenode/lib/async-callback.js:45:37)
    at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)

不知道为什么会这样,但量角器现在看起来很脆弱......我使用浏览器对象查找元素、输入文本等没有问题......

任何帮助,将不胜感激

编辑:如果我将行更改为以下内容,我可以与文本字段进行交互。browser.driver.findElement(protractor.By.id('sample_ad_id')).sendKeys('batman');

4

3 回答 3

3

希望这会对其他人有所帮助....

在 github 上找到了这个(参见参考链接)。我认为的问题是脚本没有返回,因此 sendKeys 不起作用。在使用量角器对象(元素、ptor 等)与 dom 交互之前,请设置此变量:

browser.ignoreSynchronization = true;

以下工作的原因是因为它不依赖异步调用,它只是直接与 dom 交互并将键插入到输入字段中。 browser.driver.findElement(protractor.By.id('sample_ad_id')).sendKeys('batman');

我的电话不起作用的原因(我相信)是因为有一个异步调用没有及时返回。
element(by.model('sample_ad.id')).sendKeys('batman');

参考资料: https ://github.com/angular/protractor/issues/325

于 2014-01-09T23:45:13.247 回答
1

看起来您的测试正在超时。量角器的默认超时为 11 秒。

尝试为此测试设置不同的超时:

it('should override timeout', function() {
  // Timeout of 30 seconds.
  element(by.model('sample_ad.id')).sendKeys('batman');
}, 30000)

您还可以在量角器配置文件中覆盖所有测试的超时。请参阅此示例配置文件:

https://github.com/andresdominguez/protractor-meetup/blob/master/protractor-config.js#L19

// Inside the protractor config file.
onPrepare: function() {
  // Override the timeout for webdriver.
  var ptor = protractor.getInstance();
  ptor.driver.manage().timeouts().setScriptTimeout(60000);
}
于 2014-01-09T01:42:24.333 回答