量角器 browser.wait 不等待
Protractor browser.wait doesn't wait
我假设 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 等待?还是我完全使用了错误的功能?在我的浏览器到达下一次调用所需的位置之前,我需要阻止一些事情。
都是关于承诺的(实际上每个量角器问题都是关于承诺的)。
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 被解析(如果 returns 中的函数是一个 promise)。
在这种情况下,您可以使用 then()
来获得正确的顺序:
beforeEach(function() {
browser.wait(function() {
console.log('1 - BeforeEach WAIT');
return true;
}).then(function () {
console.log('2 - BeforeEach after wait');
});
});
在此处查看用例:
- How can I wait for a condition?
等待函数将暂停执行该特定函数,但 JavaScript 以异步方式工作。所以有时你的函数可能会在等待函数之前被执行。
要更好地理解它,您需要阅读 angular/protractor 中的 Promises。
为了让您的代码正常工作,您需要 .then(function(){}); (要求功能 2 等到第一个完成。
browser.wait(function() {
console.log('1 - BeforeEach WAIT');
return true;
}).then(function () {
console.log('2 - BeforeEach after wait');
});
您需要使用await
指示量角器暂停直到browser.wait
完成
it('test case', async () => {
await browser.wait(function() {
console.log('1 - BeforeEach WAIT');
return true;
});
console.log('2 - BeforeEach after wait');
});
我假设 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 等待?还是我完全使用了错误的功能?在我的浏览器到达下一次调用所需的位置之前,我需要阻止一些事情。
都是关于承诺的(实际上每个量角器问题都是关于承诺的)。
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 被解析(如果 returns 中的函数是一个 promise)。
在这种情况下,您可以使用 then()
来获得正确的顺序:
beforeEach(function() {
browser.wait(function() {
console.log('1 - BeforeEach WAIT');
return true;
}).then(function () {
console.log('2 - BeforeEach after wait');
});
});
在此处查看用例:
- How can I wait for a condition?
等待函数将暂停执行该特定函数,但 JavaScript 以异步方式工作。所以有时你的函数可能会在等待函数之前被执行。 要更好地理解它,您需要阅读 angular/protractor 中的 Promises。
为了让您的代码正常工作,您需要 .then(function(){}); (要求功能 2 等到第一个完成。
browser.wait(function() {
console.log('1 - BeforeEach WAIT');
return true;
}).then(function () {
console.log('2 - BeforeEach after wait');
});
您需要使用await
browser.wait
完成
it('test case', async () => {
await browser.wait(function() {
console.log('1 - BeforeEach WAIT');
return true;
});
console.log('2 - BeforeEach after wait');
});