gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 01:16:49 26 4
gpt4 key购买 nike

我是 Protractor 的新手。我正在做测试以熟悉它。在这里,我遇到了一个问题,我无法区分 ignoreSynchronization 和 async/await 方法。我有 3 个块来测试它们。第一个很清楚, 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
第二个是添加await的第一个块

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);
});

这个块的打印流程是1、2、3、4、5、6。
对于最后一个块,它是一个带有 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);
});

这个块的结果和第一个一样吗?我不知道为什么。也许,我没有使用 ignoreSynchronization 作为正确的方法。但是谁能解释这两种方法之间的区别?非常感谢

最佳答案

ignoreSynchronizationasync/ await 彼此非常不同。
忽略同步:
此函数已被弃用并由 waitForAngularEnabled() 函数取代。
为什么需要它?
Protractor 被广泛用于测试 Angular 网站。因此,当执行开始时, Protractor 会在被测应用程序中搜索角度组件。
因此,如果我们正在测试 Angular 应用程序,则可以初始化browser.waitForAngularEnabled(true)这也意味着browser.ignoreSynchronization = false但是,如果有人想测试一个非角度的网站,则必须在执行期间禁用对角度组件的搜索。因此使用以下设置browser.waitForAngularEnabled(false)这也意味着browser.ignoreSynchronization = true异步/等待
它们用于处理 promise 。由于 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如果您想了解有关异步编程的更多信息,请在 JSConfEU 上查看 Philip Roberts 的 this video
希望这能解决您的疑问:-)

关于selenium-webdriver - Protractor : Protractor 中的 ignoreSynchronization 和 async/await 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63218642/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com