在量角器辅助函数上,我如何知道 browser.get 是否被调用过?

On a protractor helper function, how can I know if browser.get was ever called?

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

这对我 运行 单独进行每个测试以调试它很有用,并且当 运行 对整个套件进行调试时,由于之前不必登录,我的性能得到了一点提升每次测试。

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

  1. 如果从未加载任何页面(browser.get() 未被调用)。
  2. 我们正在访问页面,但尚未登录。

情况2很简单。该应用程序有一个元素,当用户登录时,该元素会显示在所有页面上。

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

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

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

不胜感激。

问得好,尽管我认为在你做某事后在非确定性状态下进行测试不是一个好主意。

我能想到的知道是否调用了 get 的唯一方法是检查 browser.driver.getCurrentUrl() return 是否需要 URL,或者 return about:blank. 但是你必须等待一些时间,因为 getCurrentUrl returns about:blank 即使在调用 get 之后,页面也没有完全加载。所以我会这样做:

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 或您的 "login element" 可能就足够了。但这应该会给你一个启动。