Case I try to test: On Angular app page press button, that redirects you to some other site (not an Angular app).
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');
});
but I get:
UnknownError: unknown error: angular is not defined
How that can be achived? Thanks!
You need to do 2 things
browser.ignoreSynchronization = true;
before trying to read the URL of the 3rd party page, so the browser doesn't wait for (and so require) Angular promises to resolve in the page (and set it to false
afterwards);browser.getCurrentUrl()
as opposed to browser.getLocationAbsUrl()
, as the former just uses the plain webdriver method of reading the URL, rather than accesing it via Angular.The following should work:
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;
});