量角器虽然可见但不识别元素

时间:2016-11-01 13:24:56

标签: angularjs selenium-webdriver protractor

我在使用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网站,但同样的解决方案不再适用。 登录后,我被重定向到主页并收到错误消息: 失败:等待Protractor在60秒后与页面同步的时间超时。虽然我想要与之交互的元素是可见的。

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

2 个答案:

答案 0 :(得分:0)

在您的代码中,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;
});

答案 1 :(得分:0)

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

我遇到的问题: 您的页面重复轮询$ timeout或$ http。量角器不会做任何事情,直到Angular达到了休息状态" state(加载所有元素和数据绑定,并返回所有请求)。

使用$ interval代替$ timeout或$ http可以解决问题