在量角器辅助函数上,我怎么知道是否曾调用过browser.get?

时间:2015-11-11 23:53:05

标签: testing automated-tests protractor helpers

我正在为我的量角器测试创建一个辅助函数,以便仅在必要时登录应用程序。

这对于允许我单独运行每个测试以进行调试非常有用,并且在运行整个套件时,我可以通过在每次测试之前不必登录来获得一点性能提升。

我必须在两种情况下实际登录:

  1. 如果没有加载任何页面(browser.get()未被调用)。
  2. 我们在某个页面上,但尚未登录。
  3. 情况2很容易。应用程序具有在用户登录时显示在所有页面上的元素。

    困难的部分是1.如果我在加载任何页面之前尝试找到指示用户已登录的元素,我会收到以下错误:

    Error while waiting for Protractor to sync with the page: "angular could not be found on the window"
    

    我没有在量角器API或源代码上看到任何可以帮助我确定是否已加载任何页面的内容。

    任何指针都表示赞赏。

1 个答案:

答案 0 :(得分:2)

很好的问题,即使我认为在你做某事之后让测试处于非确定性状态并不是一个好主意。

只有这样才能知道我是否可以调用get是检查browser.driver.getCurrentUrl()是否返回所需的URL,或者不返回about:blank。 但是你必须等待一段时间,因为即使在调用get之后getCurrentUrl返回about:blank,但是页面没有完全加载。所以我会做这样的事情:

beforeEach(function() {
    EC = protractor.ExpectedConditions;
    var URL;
    browser.ignoreSynchronization = true; 
    //get rid of automatic check that would give you the "Protractor Sync Error"
    browser.wait(EC.presenceOf($('.ng-scope')),500)
                .then(function(){},function(err) {
                    console.log(err)
                    browser.driver.getCurrentUrl().then(function(url) {
                        URL = url;
                        if(URL == "about:blank"){
                            console.log('no get before');
                            // your login function here - no get was called before this wait
                        }
                    });
                });
    browser.ignoreSynchronization = false;

});

问题是,如果您甚至需要检查about:blank,因为在您的情况下,检查.ng-scope或您的“登录元素”可能就足够了。但这应该会给你一个kickstart。