Selenium webdriver 量角器:什么';量角器中ignoreSynchronization和async/await的区别是什么

Selenium webdriver 量角器:什么';量角器中ignoreSynchronization和async/await的区别是什么,selenium-webdriver,async-await,protractor,automated-tests,Selenium Webdriver,Async Await,Protractor,Automated Tests,我是量角器新手。我正在做测试来熟悉它。在这里,我遇到了一个无法区分ignoreSynchronization和async/await方法的问题。我有3块来测试它们。第一个是明确的量角器自己的异步功能 it('without await and ignoreSynchronization',async function(){ wait browser.waitForAngularEnabled(false); 等待browser.driver.get命令https://www.baidu.com

我是量角器新手。我正在做测试来熟悉它。在这里,我遇到了一个无法区分ignoreSynchronization和async/await方法的问题。我有3块来测试它们。第一个是明确的量角器自己的异步功能

it('without await and ignoreSynchronization',async function(){
wait browser.waitForAngularEnabled(false);
等待browser.driver.get命令https://www.baidu.com');
console.log('1');
元素(by.css('#kw'))。sendKeys('dragotor')。然后(()=>{
console.log('2');
});
console.log('3');
console.log('4');
元素(by.css('#su'))。单击()。然后(()=>{
控制台日志('5');
})
console.log('6');
浏览器.驱动程序.睡眠(2000年);

});
信号同步
异步/等待
彼此非常不同

信号同步: 此函数已被弃用并替换为
waitForAngularEnabled()
函数

为什么需要它

量角器广泛用于测量角度。因此,当执行开始时,量角器在被测应用程序中搜索角度分量。 所以,如果我们正在测试angular应用程序,可以初始化

browser.waitForAngularEnabled(true)

这也意味着

browser.ignoreSynchronization=false

但如果有人想测试一个非角度的网站,必须在执行过程中禁用对角度组件的搜索。因此,使用以下设置

browser.waitForAngularEnabled(false)

这也意味着

browser.ignoreSynchronization=true

异步/等待 他们习惯于处理承诺。因为JavaScript是一种同步语言,在执行期间调用回调函数的意义上它是异步的,promise用于处理这些函数

现在我将解释第二和第三个程序的输出:

  await console.log('1'); // 1 will be printed
  await element(by.css('#kw')).sendKeys('protractor').then(() => {
    console.log('2'); // as `await` keyword is used, execution will wait till promise is resolved and then 2 is printed
  });
  await console.log('3'); // print 3
  await console.log('4'); // print 4
  await element(by.css('#su')).click().then(() => {
    console.log('5'); // again execution will wait till promise is resolved and 5 is printed
  })
  await console.log('6'); // print 6
因此op是
1,2,3,4,5,6

第三码

console.log('1'); // print 1
  element(by.css('#kw')).sendKeys('protractor').then(() => {
    console.log('2'); // this block will be handled by browser for execution and executed once stack is emppty
  });
  console.log('3'); // print 3
  console.log('4'); // print 4
  element(by.css('#su')).click().then(() => {
    console.log('5'); // this block will be handled by browser for execution and executed once stack is empty, after printing 2
  })
  console.log('6'); // print 6. Now stack is empty and after printing 6, 2 will be printed
因此op是
1,3,4,6,2,5

如果您想了解有关异步编程的更多信息,请访问JSU的Philip Roberts


希望这能解决您的查询:-)

从量角器6.0.0开始
忽略同步
在量角器中不存在,您应该使用
浏览器。waitForAngularEnabled

因此,当您执行
browser.ignoreSynchronization=true
时,它没有任何效果,实际上它什么都不做

你之所以看到不同的结果,是因为你没有处理承诺,而承诺是以随机顺序解决的。有两种处理方法:
async/await
.then()
语法,但最后一种方法很长,不可读且复杂,这使得调试过程成为一场噩梦


我想第一个答案涵盖了其余的部分

您使用的是哪种量角器版本?我的量角器版本是7.0.0汉克斯。这确实是一个全面的答案。