量角器browser.wait不等待 [英] Protractor browser.wait doesn't wait

查看:93
本文介绍了量角器browser.wait不等待的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am assuming that browser.wait should be a blocking call, but it is not working as I expected. Here is my sample:

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;

Now, because I assumed browser.wait was actually blocking, I thought that my console.log calls would be run in order; 1,2,3,4,5;

我得到的实际输出是:

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

如何获取browser.wait等待?还是我完全使用了错误的功能?我需要阻止一切,直到我的浏览器到达下一个呼叫所需的位置为止.

How can I get browser.wait to wait? Or am I using the wrong function completely? I need things to block until my browser gets to where it needs to be for the next call.

推荐答案

这完全与承诺有关(实际上每个量角器问题都与承诺有关).

It is all about promises (actually every protractor question is about promises).

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

计划一个命令,以等待条件成立,如:一些用户提供的功能.如果评估时发生任何错误等待,它们将被允许传播.如果有条件返回一个webdriver.promise.Promise,轮询循环将等待它待解决,并使用已解决的值来评估是否条件已满足.承诺的解决时间是考虑等待是否超时.

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).

It would not call the function you are passing in immediately, it would schedule a command and wait for promise to be resolved (if the function inside returns a promise).

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

You can use then() to have a correct order in this case:

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

在此处查看用例:

这篇关于量角器browser.wait不等待的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆