2017-04-13 5 views
1

私は私のアプリに非角度エントリーページを持っていると私は最初にログインしようとしている。しかし、これはエラーになります進路を進める前にログインを待つようにする方法はありますか?

describe('Authentication', function() { 
    it('should authenticate a user', function() { 
    browser.driver.get('https://example.com') 

    browser.driver.findElement(by.id('username')).sendKeys("user"); 
    browser.driver.findElement(by.id('password')).sendKeys("mypass"); 
    browser.driver.findElement(by.tagName('input')).click() 
    var url = browser.getLocationAbsUrl() 
    browser.driver.sleep(1) 
    browser.waitForAngular() 

    return 
    }) 
}) 

Failed: Error while waiting for Protractor to sync with the page: "window.angular is undefined. This could be either because this is a non-angular page or bec 
ause your test involves client-side navigation, which can interfere with Protractor's bootstrapping. See http://git.io/v4gXM for details" 

私はこの問題を解決するために何ができます?

+1

でない場合、そのページでコマンドを実行する前に 'browser.ignoreSynchronization = false'を設定する必要があります。また、FYIの 'sleep'はミリ秒で、秒ではありません。あなたは現在0.001秒待っています – Gunderson

+0

私は 'browser.ignoreSynchronization = false'を追加して同じエラーを受けました – Shamoon

+0

うわー、申し訳ありません、私は' true'を意味しました... – Gunderson

答えて

1

私は私のE2E-テストでこの仕事を得るために、過去にいくつかのヘルパーを書いた:

waitForUrlToChangeTo: function (urlToMatch) { 
    var currentUrl; 
    return browser.getCurrentUrl().then(function storeCurrentUrl(url) { 
      currentUrl = url; 
     }) 
     .then(function waitForUrlToChangeTo() { 
      browser.ignoreSynchronization = true; 
      return browser.wait(function waitForUrlToChangeTo() { 
       return browser.getCurrentUrl().then(function compareCurrentUrl(url) { 
        browser.ignoreSynchronization = false; 
        return url.indexOf(urlToMatch) !== -1; 
       }); 
      }); 
     } 
    ); 
}, 
login : function (username, password, url) { 
    browser.get('#/login'); 
    element(by.model('username')).sendKeys(username); 
    element(by.model('password')).sendKeys(password); 
    element(by.buttonText('LOGIN')).click(); 
    return this.waitForUrlToChangeTo(url); 
} 

そして、テストでは:

describe('when I login with valid credentials', function() { 
    it('should redirect to dashboard', function() { 
     helper.login('user', 'pass', '#/dashboard').then(function() { 
      expect(browser.getTitle()).toMatch('Dashboard'); 
     }); 
    }); 
}); 
+0

私は同じエラーを返します '失敗:このページと同期: "window.angularは定義されていません。これは角度のないページか、クライアント側のナビゲーションが含まれているために がテストに参加している可能性があります(http:// gitを参照してください)。 io/v4gXM詳細については、 – Shamoon

1

私は、ログインしたページが適切に表示され、行動するまで待つといいでしょう。たとえば、

  • ログインしたページの一部をターゲットにして、それを待ってください。
  • など、URLの変更待ち、

login -> browser.sleep(500)/wait for logged in page's element/URL change -> other action

browser.driver.wait(function(){ 
    expectedElement.isDisplayed().then(function (isVisible){ 
      return isVisible === true; 
      },50000, 'Element not present '); 
},50000); 

if that element is not present within specified time, timeout error would display & you would know unitl that time it's not logged in.

関連する問題