gpt4 book ai didi

javascript - Protractor browser.wait 不等待

转载 作者:IT王子 更新时间:2023-10-29 03:19:12 25 4
gpt4 key购买 nike

我假设 browser.wait 应该是一个阻塞调用,但它没有像我预期的那样工作。这是我的示例:

describe("browser.wait", function() {
beforeEach(function() {
browser.wait(function() {
console.log('1 - BeforeEach WAIT');
return true;
});
console.log('2 - BeforeEach after wait');
});

afterEach(function() {
browser.wait(function() {
console.log('4 - afterEach WAIT');
return true;
});
console.log('5 - afterEach after wait');
});

it('should probably actually wait.', function() {
console.log('3 - IT statement');
expect(1).toBe(1);
});

现在,因为我假设 browser.wait 实际上是阻塞的,所以我认为我的 console.log 调用会按顺序运行; 1,2,3,4,5;

我得到的实际输出是:

2 - BeforeEach after wait  
1 - BeforeEach WAIT
3 - IT statement
5 - afterEach after wait
4 - afterEach WAIT

如何让 browser.wait 等待?还是我完全使用了错误的功能?在我的浏览器到达下一次调用所需的位置之前,我需要阻止一些事情。

最佳答案

这都是关于 promise 的(实际上每个 Protractor 问题都是关于 promise 的)。

browser.wait()不是阻塞调用,它安排命令等待条件:

Schedules a command to wait for a condition to hold, as defined by some user supplied function. If any errors occur while evaluating the wait, they will be allowed to propagate. In the event a condition returns a webdriver.promise.Promise, the polling loop will wait for it to be resolved and use the resolved value for evaluating whether the condition has been satisfied. The resolution time for a promise is factored into whether a wait has timed out.

它不会立即调用您传入的函数,它会安排一个命令并等待 promise 被解析(如果函数内部返回一个 promise)。

在这种情况下,您可以使用 then() 获得正确的顺序:

beforeEach(function() {
browser.wait(function() {
console.log('1 - BeforeEach WAIT');
return true;
}).then(function () {
console.log('2 - BeforeEach after wait');
});
});

在这里查看用例:

关于javascript - Protractor browser.wait 不等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27803314/

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