2015-04-29 27 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

相关问题