【问题标题】:Protractor doesn't recognize element although it is visible量角器无法识别元素,尽管它是可见的
【发布时间】:2016-11-01 13:24:56
【问题描述】:

Protractor ignoreSynchronization 有问题。

如果不使用 browser.ignoreSynchronization = true,我无法登录。登录后不再需要ignoreSynchronization。

这里是登录代码:

browser.driver.get('xxx');

browser.ignoreSynchronization = true;

$('#input-idCode').sendKeys(idCode);
$('#input-phoneno').sendKeys(mobileNum);
$('.mobile-id').click();

browser.wait(EC.presenceOf(nextButton), 15000);
browser.ignoreSynchronization = false;

在下一个案例中,我也在测试 Angular 网站,但同样的解决方案不再起作用。 登录后,我被重定向到主页并收到错误消息: 失败:在 60 秒后等待 Protractor 与页面同步超时。虽然我要与之交互的元素是可见的。

可能是什么问题?我不想使用 ignoreSynchronization = true 运行测试。

【问题讨论】:

  • 如果您的错误是“等待量角器同步超时...”,则与元素无关。询问您的开发人员应用程序是否持续轮询 $http 或 $timeout,通常用于 keepAlive 服务。参考this document

标签: angularjs selenium-webdriver protractor


【解决方案1】:

在您的代码中,getsendKeysclick 是异步执行的,但 browser.ignoreSynchronization 是同步分配的。所以当控制流执行driver.get时,属性ignoreSynchronization已经被设置为false

要解决此问题,请在控制流中推送分配:

browser.driver.get('xxx');

browser.controlFlow().execute(function() {
  browser.ignoreSynchronization = true;
});

$('#input-idCode').sendKeys(idCode);
$('#input-phoneno').sendKeys(mobileNum);
$('.mobile-id').click();

browser.wait(EC.presenceOf(nextButton), 15000);

browser.controlFlow().execute(function() {
  browser.ignoreSynchronization = false;
});

【讨论】:

  • 不幸的是,它对我不起作用。 Protractor 不再登录,只是等待 $('#input-idCode') 元素。错误消息:失败:在 60 秒后等待 Protractor 与页面同步超时。请参阅github.com/angular/protractor/blob/master/docs/faq.md 在等待带有定位器的元素时 - 定位器:By(css selector, #input-idCode)
  • 您是否尝试过在browser.driver.get('xxx'); 之前忽略同步?
  • browser.ignoreSynchronization = true; browser.driver.get('xxx'); $('#username').sendKeys(username); $('#password').sendKeys(password); $('.btn-primary').click(); browser.ignoreSynchronization = false; browser.wait(EC.presenceOf($('.left_action')), 20000); 这对我也不起作用...
  • 我不明白为什么 Protractor 在browser.ignoreSynchronization = false,这是 Angular 网站时在此页面上找不到元素。
【解决方案2】:

Timed out waiting for Protractor to synchronize with the page after 50001ms

我遇到的问题: 您的页面正在反复轮询 $timeout 或 $http。 Protractor 不会做任何事情,直到 Angular 达到“休息”状态(所有元素和数据绑定都已加载并且所有请求都已返回)。

使用 $interval 而不是 $timeout 或 $http 应该可以解决问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 2018-10-04
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    相关资源
    最近更新 更多