问题:

在量角器中编写多浏览器窗口测试的规范方法是什么-涉及多个会话的测试激发了彼此的交互?

故事:

主要问题是:当您通过browser.forkNewDriverInstance(true)派生新浏览器时,所有全局Protractor对象(例如element()element.all())仍绑定到第一个/父浏览器。这使得很难遵循Page Object模式,因为那里的所有定义都使用全局elementelement.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"));
}


测试用例: ,这是我们需要实现的测试用例之一。普通用户登录到应用程序。然后,在其他浏览器中,管理员用户登录到该应用程序。管理员用户通过管理工具关闭常规用户的会话。确认正常用户的会话已正确关闭。

评论

您在此处获得的测试用例可以使用两个工作站来实现,因为管理员和用户使用同一台PC的可能性有多大?

@俞章好点。好吧,出于这些测试的目的,不同的浏览器也可以为我们工作。谢谢。

多浏览器测试(原始问题标题)通常指的是不同的浏览器,例如Firefox,Chrome,Safari,IE等。您的问题详细信息实际上是关于一种浏览器的多会话问题,因此我更新了标题和详细信息以反映该问题。

#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);
    });
});