2015-04-29 59 views
6

我嘗試測試: 在Angular應用程序頁面按下按鈕,它將您重定向到其他網站(而不是Angular應用程序)。量角器:獲取非角度頁面的網址

it('should go to 3d party service when i click "auth" button' , function() { 

    browser.driver.sleep(3000); 
    element(by.id('files-services-icon')).click(); 
    element(by.id('box-vendor-menu-item')).click(); 
    browser.driver.sleep(2000); 

    expect(browser.driver.getLocationAbsUrl()).toContain('https://app.box.com/api/oauth2/authorize'); 
}); 

,但我得到:

UnknownError: unknown error: angular is not defined

如何可以achived?謝謝!

回答

7

你需要做兩件事情

  • 設置browser.ignoreSynchronization = true;嘗試讀取第三方網頁的URL,這樣瀏覽器就不會等待(等要求)角承諾在頁面解析之前(之後將其設置爲false);
  • 使用browser.getCurrentUrl()而不是browser.getLocationAbsUrl(),因爲前者只是使用普通的webdriver讀取URL的方法,而不是通過Angular訪問它。

下面應該工作:

it('should go to 3d party service when i click "auth" button' , function() {  
    element(by.id('files-services-icon')).click(); 
    element(by.id('box-vendor-menu-item')).click(); 
    browser.ignoreSynchronization = true; 
    expect(browser.getCurrentUrl()).toContain('https://app.box.com/api/oauth2/authorize'); 
    browser.ignoreSynchronization = false; 
}); 
2

您需要調整ignoreSynchronization flag - 點擊鏈接之前將其設置爲trueafterEach()設置回false

afterEach(function() { 
    browser.ignoreSynchronization = false; 
}); 

it('should go to 3d party service when i click "auth" button' , function() {  
    element(by.id('files-services-icon')).click(); 

    browser.ignoreSynchronization = true; 
    element(by.id('box-vendor-menu-item')).click(); 

    expect(browser.getLocationAbsUrl()).toContain('https://app.box.com/api/oauth2/authorize'); 
}); 

參見:

您可能還需要等待URL更改,example here

+0

謝謝你的解釋,但是這也返回相同的錯誤 '不明錯誤:未知的錯誤:角是不是defined' – paka

相關問題