Protractor:获取非Angular页面的URL

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: 未知错误:angular 未定义

请问如何解决这个问题?谢谢!
2个回答

8
你需要做两件事情:
  • 在尝试读取第三方页面的URL之前,设置browser.ignoreSynchronization = true;,这样浏览器就不会等待(因此也不需要)Angular promises在页面中解决(并在之后将其设置为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标志 - 在点击链接之前将其设置为true,并在afterEach()中将其设置回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更改,示例在此处


谢谢您的解释,但这仍然返回相同的错误 “UnknownError:未知错误:angular未定义” - paka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接