量角器打开新窗口

时间:2015-09-24 11:22:53

标签: javascript angularjs protractor

让我们说我正在开发一个聊天应用程序,用户(X)可以登录该应用程序并向另一个用户发送消息(Y)。

我现在正尝试使用以下步骤自动执行测试以发送和接收消息:

1. X Logs in with his username/password.
2. Selects Y from a list and sends a "Test Message" to Y.
3. X signs out.
4. Y logs in with his username/password.
5. Checks if he has received the message from X.
6. Y replies to X with "Reply to Test Message".
7. Y signs out.
8. X logs in, and checks if he got the reply.

如果我要手动执行此操作,我只需打开两个窗口(其中一个以隐身方式登录),一个登录为X,另一个登录为Y并验证结果。

所以,几乎没有问题: 1.量角器是否允许在不随地点击的情况下打开新窗口的方式?只是一个以编程方式生成新窗口的函数? 2.是否可以让这些窗口不共享用户的会话(有点像隐姓埋名)?

4 个答案:

答案 0 :(得分:3)

您可以通过发送CTRL + SHIFT + N键组合打开一个新的隐身声明:

user_username

然后使用窗口句柄,并在窗口之间切换

browser.actions()
       .sendKeys(protractor.Key.chord(protractor.Key.CONTROL, protractor.Key.SHIFT ,"n"))
       .perform();

在窗口之间切换后,所有下一个方法都将用于活动窗口。 如果它在隐姓埋名中适合你,也应该在这里工作。

答案 1 :(得分:3)

以下对我来说很好。

browser.executeScript('window.open()').then(function () {
     browser.getAllWindowHandles().then(function (handles) {
            var secondWindow = handles[1];
            browser.switchTo().window(secondWindow).then(function () {
                return browser.get(newPageToOpen);
            });
     });
});

希望这有帮助。

答案 2 :(得分:0)

对于正在寻找打字稿解决方案的每个人。

具有较小更改的

vrachlin代码可以正常运行:

browser.getAllWindowHandles().then(handles => {
   browser.switchTo().window(handles[1]); // 0 or 1 to switch between the 2 open windows
});

答案 3 :(得分:0)

我是以这种方式做的:

let _2ndBrowser = browser.forkNewInstance();
let url = 'https://google.com';

browser.get(url);
_2ndBrowser.get(url);
browser.element(by.xpath(...)).click();
_2ndBrowser.element(by.xpath(...)).click();

工作正常。

如果使用的是PageObject,则可以将浏览器设置为构造函数参数。并设置为

function LoginPage(browserContext) {
  this.setUserName = function(userName){ 
    return browserContext.element(/*locator*/).sendKeys(userName)
  }
}

it('set login name', function() {
  let _2ndBrowser = browser.forkNewInstance();
  let user1LoginPage = new LoginPage(browser);
  let user2LoginPage = new LoginPage(_2ndBrowser);

  user1LoginPage.setUserName('alice');
  user2LoginPage.setUserName('bob');
})

利润=)