Protractor browser.wait 不等待

2024-02-07

我假设 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() http://angular.github.io/protractor/#/api?view=webdriver.WebDriver.prototype.wait不是阻塞调用,它安排一个命令等待一个条件:

安排命令等待条件成立,如所定义 一些用户提供的函数。如果评估过程中出现任何错误 等等,他们将被允许传播。如果有条件 返回一个 webdriver.promise.Promise,轮询循环将等待它 进行解析,并使用解析值来评估是否 条件已满足。承诺的解决时间是 考虑等待是否超时。

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

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

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

请参阅此处的用例:

  • 我怎样才能等待一个条件? https://stackoverflow.com/questions/22072327/how-can-i-wait-for-a-condition
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Protractor browser.wait 不等待 的相关文章