我在使用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运行测试。
答案 0 :(得分:0)
在您的代码中,get
,sendKeys
和click
是异步执行的,但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可以解决问题