selenium-webdriver - Protractor:Protractor 中的ignoreSynchronization 和async/await 有什么区别

标签 selenium-webdriver async-await protractor automated-tests

我是 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/

相关文章:

selenium - 如何使用 selenium webdriver 在浏览器中处理地理位置弹出窗口?

python - 使用 Python 和 Selenium 为什么我无法通过链接文本找到链接?

python - Python 中最简单的异步/等待示例

带有子进程的Azure服务总线接收消息

selenium - 在 Gulp 中自动运行 webdriver 进行端到端测试

javascript - 瓦提尔 "Element is no longer attached to the DOM"错误

java - 如何使用 Selenium Webdriver 测试 WebElement 属性是否存在

javascript - 如何用async/await重构这个函数?

selenium - 打破 Protractor .filter() 或 .map() 循环

angularjs - Protractor 定位器链接无法找到元素文本