在量角器中编写多浏览器窗口测试的规范方法是什么-涉及多个会话的测试激发了彼此的交互?
故事:
主要问题是:当您通过
browser.forkNewDriverInstance(true)
派生新浏览器时,所有全局Protractor对象(例如element()
和element.all()
)仍绑定到第一个/父浏览器。这使得很难遵循Page Object模式,因为那里的所有定义都使用全局element
和element.all()
。例如,我们不能将此页面对象用于分支的浏览器:var MyPageObject = function () {
this.tabs = element.all(by.repeater("caseHistoryItem in caseViewCtrl.caseHistory"));
this.activeCaseTab = element(by.css("ul#casesList li.active tab-heading.ap-tab-heading"));
}
测试用例: ,这是我们需要实现的测试用例之一。普通用户登录到应用程序。然后,在其他浏览器中,管理员用户登录到该应用程序。管理员用户通过管理工具关闭常规用户的会话。确认正常用户的会话已正确关闭。
#1 楼
您描述的测试可能不是关于两个不同的窗口,而是关于会话管理。一种解决方案是使用两种不同的浏览器,例如chromdriver和Firefox。对于普通用户使用一种浏览器,对于管理员用户使用另一种浏览器。
对于Page对象,您可能需要将它们拆分并为每个浏览器使用一组浏览器。
#2 楼
您可以通过在两个选项卡之间使用.switchTo()
来解决您的问题。还可以通过检查
handles.length
来验证用户会话是否关闭:browser.getAllWindowHandles().then(function (handles) {
browser.driver.switchTo().window(handles[1]).then(function () {
expect(browser.getCurrentUrl()).toMatch(URL_REGEX);
});
});
评论
您在此处获得的测试用例可以使用两个工作站来实现,因为管理员和用户使用同一台PC的可能性有多大?@俞章好点。好吧,出于这些测试的目的,不同的浏览器也可以为我们工作。谢谢。
多浏览器测试(原始问题标题)通常指的是不同的浏览器,例如Firefox,Chrome,Safari,IE等。您的问题详细信息实际上是关于一种浏览器的多会话问题,因此我更新了标题和详细信息以反映该问题。