我是 Protractor 新手。我正在做测试来熟悉它。在这里,我遇到了一个问题,我无法区分ignoreSynchronization和async/await方法。我有 3 个区 block 来测试它们。第一个是 Protractor 自己的异步功能。
it('without await and ignoreSynchronization', async function() {
await browser.waitForAngularEnabled(false);
await browser.driver.get('https://www.baidu.com');
console.log('1');
element(by.css('#kw')).sendKeys('protractor').then(() => {
console.log('2');
});
console.log('3');
console.log('4');
element(by.css('#su')).click().then(() => {
console.log('5');
})
console.log('6');
browser.driver.sleep(2000);
});
可以看出打印流程为1,3,4,6,2,5 第二个是第一个 block 添加等待
it('with await', async function() {
await browser.waitForAngularEnabled(false);
await browser.driver.get('https://www.baidu.com');
await console.log('1');
await element(by.css('#kw')).sendKeys('protractor').then(() => {
console.log('2');
});
await console.log('3');
await console.log('4');
await element(by.css('#su')).click().then(() => {
console.log('5');
})
await console.log('6');
browser.driver.sleep(2000);
});
该 block 的打印流程为1,2,3,4,5,6。 对于最后一个 block ,它是带有ignoreSynchronization方法的清晰版本
it('with ignoreSynchronization is True', async function() {
await browser.waitForAngularEnabled(false);
await browser.driver.get('https://www.baidu.com');
browser.ignoreSynchronization = true;
console.log('1');
element(by.css('#kw')).sendKeys('protractor').then(() => {
console.log('2');
});
console.log('3');
console.log('4');
element(by.css('#su')).click().then(() => {
console.log('5');
})
console.log('6');
browser.driver.sleep(2000);
});
这个 block 的结果和第一个 block 一样吗?我不知道为什么。也许,我没有使用ignoreSynchronization作为正确的方法。但谁能解释一下这两种方法有什么区别?非常感谢
最佳答案
从 Protractor 6.0.0 开始,Protractor 中不存在 ignoreSynchronization
,您应该使用 browser.waitForAngularEnabled
https://github.com/angular/protractor/issues/4187
因此,当您执行browser.ignoreSynchronization = true
时,它没有任何效果,实际上它没有执行任何操作
您看到不同结果的原因是您没有处理 promise 并且它们以随机顺序解决。有两种处理方法: async/await
和 .then()
语法,但最后一种非常长,不可读且复杂,这使得调试过程成为一场噩梦
我认为第一个答案涵盖了其余部分
关于selenium-webdriver - Protractor:Protractor 中的ignoreSynchronization 和async/await 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63218642/