繁体   English   中英

如何使用量角器和Chrome浏览器打开新标签页

[英]How can i open a new tab using protractor and Chrome browser

这是一个代码(新选项卡无法打开):

//在Chrome中打开新标签页

browser.actions().sendKeys(protractor.Key.CONTROL +'t').perform();

如果我们使用'a'代码 - 一切都很好:

//在页面上选择全部

browser.actions().sendKeys(protractor.Key.CONTROL +'a').perform();

量角器v.1.3.1

Chrome v.37

ChromeDriver v.2.10

WebDriver v.2.43

如果你真的不想在你的DOM中添加一个元素,那么你可以试试这个:

let url = https://google.com;
return browser.executeScript("return window.open(arguments[0], '_blank')", url);
//opens google.com in a new tab (works fine with Chrome. P.S. have only tested
// Chrome with Protractor).

我用browser.wait()尝试了上面的语句,看看你是否真的需要等待,因为browser.executeScript()返回一个promise本身,只能利用promise的成功。

此外,我观察到虽然浏览器的焦点似乎已更改为新打开的选项卡,但我无法访问新选项卡的元素。 要做到这一点:

browser.getAllWindowHandles().then((handles) => {
    browser.switchTo().window(handles[1]);    // pass the index, here assuming that
                                              // there are only two tabs in the browser
})

要了解有关window.open()更多信息,您可以访问它。

Selenium没有提供这样做的方法,因此解决方法似乎是唯一的方法。 假设你在Windows或Linux中,你的CTRL + T想法应该写成如下,但是对我来说这个黑客失败了:

browser.actions().keyDown(protractor.Key.CONTROL).sendKeys('t').perform();

甚至尝试在元素上执行此操作:

$$('input').first().sendKeys(protractor.Key.chord(protractor.Key.CONTROL, "t"));

好消息是以下黑客似乎确实有效,随意用您要打开的网址替换location.href

browser.driver.executeScript(function() {
  (function(a){
  document.body.appendChild(a);
  a.setAttribute('href', location.href);
  a.dispatchEvent((function(e){
    e.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, true, false, false, false, 0, null);
    return e;
  }(document.createEvent('MouseEvents'))))}(document.createElement('a')));
});

我认为在ChromeDriver中“打开一个新标签”的问题,我发现了一个类似这样的错误: https//code.google.com/p/chromedriver/issues/detail? id = 903&q = new%20tab&cfpec = ID%20Status% 20Pri%20Owner%20Summary

这段代码适用于带有量角器的TypeScript。

import {browser} from 'protractor';

export class Browser {
  public async openPageInNewTab(url: string) {
    await this.createNewBrowserTab();
    await this.switchToTabNumber(1);
    await browser.get(url);
  }

  public createNewBrowserTab() {
    browser.executeScript('window.open()');
  }

  public async switchToTabNumber(number: number) {
    return browser.getAllWindowHandles().then(function (handles) {
      const newWindowHandle = handles[number];
      browser.switchTo().window(newWindowHandle);
    });
  }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM