例如,我想测试使用AngularJS实现的两个登录用户之间的聊天功能。
测试需要验证两个或多个单独的浏览器操作集以正确的顺序发生。例如,用户A登录,用户B登录,用户A看到B登录,用户A发送用户B聊天文本,用户B接收聊天文本。用户B响应用户A。
这可以用量角器完成吗?如果没有,是否有另一种方法可以自动测试多个浏览器会话工作流程?
答案 0 :(得分:12)
更新此功能最终为added,请参阅example usage and docs和tests 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地址或在主机文件中设置新域..