量角器可用于测试多个浏览器会话交互吗?

时间:2014-05-08 14:04:44

标签: angularjs protractor

例如,我想测试使用AngularJS实现的两个登录用户之间的聊天功能。

测试需要验证两个或多个单独的浏览器操作集以正确的顺序发生。例如,用户A登录,用户B登录,用户A看到B登录,用户A发送用户B聊天文本,用户B接收聊天文本。用户B响应用户A。

这可以用量角器完成吗?如果没有,是否有另一种方法可以自动测试多个浏览器会话工作流程?

2 个答案:

答案 0 :(得分:12)

更新此功能最终为added,请参阅example usage and docstests here或参见下文:

browser.get('http://www.angularjs.org');

// To create a new browser with url as 'http://www.angularjs.org':
var browser2 = browser.forkNewDriverInstance(true);

// Interaction in the first browser
element(by.model(...)).click();

// Interaction in the second browser
browser2.$('.css').click();

请注意,IE和Safari不会隔离Cookie或缓存,因此除非您的selenium提供程序是始终使用干净会话的网格,否则不希望能够同时在不同用户登录比如SauceLabs或BrowserStack。

答案 1 :(得分:6)

您可以在测试中打开其他窗口,并在这些窗口中执行操作和断言。您可以使用标准webdriverjs API执行此操作:

browser.getAllWindowHandles().then(function (handles) {

  // handle of first window
  var originalHandle = handles[0];

  // open new window
  browser.executeScript('window.open("https://angularjs.org/", "second-window")');

  // switch to new window
  browser.switchTo().window('second-window');

  // do something within context of new window

  // switch to original window
  browser.switchTo().window(originalHandle);

  // do something within context of original window

  // closes the current window
  browser.executeScript('window.close()');

});

如果您使用会话cookie,这可能对您不起作用。两个窗口都可以获得相同的cookie。如果是这样,您将最终以两个窗口中的同一用户身份登录。一种解决方法是在不同的域上访问应用程序的第二个实例。例如,使用IP地址或在主机文件中设置新域..