【问题标题】:Unable to open a new tab or new window in selenium无法在 selenium 中打开新选项卡或新窗口
【发布时间】:2019-01-09 17:03:13
【问题描述】:

我正在尝试使用 Keys.CONTROL + "t" 在 Chrome 中打开一个新标签,但它不起作用。 这是代码

            System.setProperty("webdriver.chrome.driver", "C:/Downloads/New folder/chromedriver.exe");
            WebDriver driver = new ChromeDriver();
            driver.get("https://www.google.com");               
            driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");

执行脚本后,启动 chrome 并加载 google.com,但没有打开新标签。

操作系统:Win-10

Selenium 版本:selenium-java-3.13.0

Chrome 版本:版本 68.0.3440.84(官方构建)(64 位)

是 selenium 3.13.0 的问题还是我做错了什么。

PS:我尝试使用 JavascriptExecutor,它工作正常。我需要知道为什么 driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t"); 不能正常工作。

提前致谢

【问题讨论】:

  • 试试 JavascriptExecutor
  • @iamsankalp89:正如我在最后的问题中已经提到的那样,我已经尝试使用 JavascriptExecutor 并且工作正常。:) 我想知道我在使用 Ctrl + t 时做错了什么,如果那么如何纠正它。谢谢
  • 试试我更新的答案。它工作正常

标签: selenium-webdriver selenium-chromedriver


【解决方案1】:

您可以尝试以下操作:

//Simulate pressing many keys at once in a "chord". 
String openNewTab = Keys.chord(Keys.CONTROL, "t");
driver.findElement(By.cssSelector("body")).sendKeys(openNewTab); 

如果您仍然遇到任何问题,请告诉我。

【讨论】:

  • 嘿,我尝试了上面的代码,但仍然没有任何反应。观察相同的行为。 Chrome 启动并加载了谷歌。而已。没有错误,也没有打开新标签。
  • 哦,好的,不知道是什么问题。如果我找到任何解决方案,我会调查并回复。
  • 很遗憾,没有,因为我无法让它工作。 chrome驱动可能有问题。
【解决方案2】:

尝试机器人类

    WebDriver driver = new ChromeDriver();
    driver.get("https://www.google.com");
    driver.manage().timeouts().pageLoadTimeout(5, TimeUnit.SECONDS);    
    Robot robot = new Robot();
    robot.keyPress(KeyEvent.VK_CONTROL);
    robot.keyPress(KeyEvent.VK_T);
    robot.keyRelease(KeyEvent.VK_T);
    robot.keyRelease(KeyEvent.VK_CONTROL);

【讨论】:

    【解决方案3】:

    这是打开新标签/窗口并检查新标签是否打开的代码。 如果打开,则切换到该窗口。

    windows1 = driver.window_handles
    driver.execute_script('window.open()')
    windows2 = driver.window_handles
    new_windows = list(set(windows2) - set(windows1))
    if len(new_windows) == 0:
      print 'ERROR: no new tabs found'
    elif len(new_windows) > 1:
      print 'ERROR: multiple new tabs found: ' + new_windows
    else:
      new_window = new_windows[0] 
    
    driver.switch_to_window(new_window)
    

    【讨论】:

    • @Raj Kamal:使用 Javascript 执行器工作正常。我想知道为什么我无法使用 Ctrl + t 打开新选项卡/窗口
    • 我还没有尝试使用组合键打开新标签页。但是,它看起来像 chromedriver 限制。检查这个错误bugs.chromium.org/p/chromedriver/issues/detail?id=581
    【解决方案4】:

    试试这个答案对我来说很好用

    public static void main(String[] args) throws Exception {
    
        System.setProperty("webdriver.chrome.driver", "C:/Users/sankalp.gupta/Desktop/JAVASELN/chromedriver.exe");
        System.out.println("Ready to launch the browser");
    
        WebDriver driver = new ChromeDriver();
        driver.get("http://yahoo.com");  
        ((JavascriptExecutor)driver).executeScript("window.open()");
        ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
        driver.switchTo().window(tabs.get(1));
        driver.get("http://google.com");
    }
    

    }

    【讨论】: