如何使用Selenium WebDriver打开新标签?

Bha*_*hah 103 firefox selenium browser-tab selenium-webdriver

如何使用Selenium WebDriver(又名Selenium 2)在现有Firefox浏览器中打开新选项卡?

Yi *_*eng 84

对于那些正在寻找Ruby/Python/C#绑定(Selenium 2.33.0)答案的人来说.

请注意,要发送的实际密钥取决于您的操作系统,例如Mac使用的COMMAND + t,而不是CONTROL + t.

红宝石

require 'selenium-webdriver'

driver = Selenium::WebDriver.for :firefox
driver.get('http://stackoverflow.com/')

body = driver.find_element(:tag_name => 'body')
body.send_keys(:control, 't')

driver.quit
Run Code Online (Sandbox Code Playgroud)

蟒蛇

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()
driver.get("http://stackoverflow.com/")

body = driver.find_element_by_tag_name("body")
body.send_keys(Keys.CONTROL + 't')

driver.close()
Run Code Online (Sandbox Code Playgroud)

C#

using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;

namespace StackOverflowTests {

    class OpenNewTab {

        static void Main(string[] args) {

            IWebDriver driver = new FirefoxDriver();
            driver.Navigate().GoToUrl("http://stackoverflow.com/");

            IWebElement body = driver.FindElement(By.TagName("body"));
            body.SendKeys(Keys.Control + 't');

            driver.Quit();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • WebDriver可以处理多个选项卡 - 它简单地将它们视为单独的窗口.所以你只需要`driver.switchTo().window(windowName);`来访问任何标签或窗口.显然,您需要正常跟踪窗口名称以允许在它们之间切换. (11认同)
  • @Thayne [ChromeDriver bug](https://code.google.com/p/chromedriver/issues/detail?id=903)阻止CTRL + T工作.您可以使用CTRL + LMB作为解决方法.有关示例代码,请参阅https://code.google.com/p/chromedriver/issues/detail?id=903#c2. (4认同)
  • Keys.COMMAND让它在Mac上运行,谢谢 (3认同)
  • 你怎么回到上一个标签? (2认同)
  • 这对我不起作用。我尝试了几种不同的按 ctrl+t 的方法,但没有一种成功打开新选项卡。 (2认同)

小智 48

下面的代码将打开新标签中的链接.

String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,Keys.RETURN); 
driver.findElement(By.linkText("urlLink")).sendKeys(selectLinkOpeninNewTab);
Run Code Online (Sandbox Code Playgroud)

下面的代码将打开空的新Tab.

String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,"t");
driver.findElement(By.linkText("urlLink")).sendKeys(selectLinkOpeninNewTab);
Run Code Online (Sandbox Code Playgroud)

  • 如果您使用的是mac,请使用Keys.COMMAND而不是Keys.CONTROL (5认同)
  • 这个解决方案似乎不太理想,因为它依赖于特定于操作系统(也可能是特定于浏览器)的快捷方式......至少,如果你使用像 JS `window.open()` 这样的东西,你可以期望它可以工作许多平台/浏览器。 (2认同)
  • 问题是“window.open()”可能会打开一个新窗口而不是新选项卡。它在 Firefox 的测试模式下执行此操作。至少在从 Katalon 运行时(它在底层使用 Selenium)。 (2认同)

ker*_*ode 30

为什么不这样做

driver.ExecuteScript("window.open('your url','_blank');");
Run Code Online (Sandbox Code Playgroud)

  • 更新到Chrome 49.0.2623.75m后,发送密钥方法对我不再有用,此方法适用于该Chrome版本. (4认同)
  • 如果你想在选项卡中打开一个空白页面,你可以`driver.ExecuteScript("window.open('about:blank','_ blank');");` (3认同)
  • 大多数弹出窗口拦截器都会阻止此尝试 (2认同)

Can*_*ner 15

从 selenium >= 4.0 开始,不需要 JavaScript 或send_keys解决方法。Selenium 4 提供了一个名为 的新 API newWindow,可让您创建新窗口(或选项卡)并自动切换到它。由于新窗口或选项卡是在同一会话中创建的,因此可以避免创建新的 WebDriver 对象。

Python

打开新选项卡

from selenium.webdriver.chrome.webdriver import WebDriver
from selenium.webdriver.common.window import WindowTypes

driver.switch_to.new_window(WindowTypes.TAB)
Run Code Online (Sandbox Code Playgroud)

打开新窗口

from selenium.webdriver.chrome.webdriver import WebDriver
from selenium.webdriver.common.window import WindowTypes

driver.switch_to.new_window(WindowTypes.WINDOW)
Run Code Online (Sandbox Code Playgroud)

爪哇

打开新窗口

driver.get("https://www.google.com/");
// Opens a new window and switches to new window
driver.switchTo().newWindow(WindowType.WINDOW);
// Opens LambdaTest homepage in the newly opened window
driver.navigate().to("https://www.lambdatest.com/");
Run Code Online (Sandbox Code Playgroud)

打开新选项卡

driver.get("https://www.google.com/");
// Opens a new window and switches to new window
driver.switchTo().newWindow(WindowType.TAB);
// Opens LambdaTest homepage in the newly opened tab
driver.navigate().to("https://www.lambdatest.com/")
Run Code Online (Sandbox Code Playgroud)


Jun*_*han 9

在Chrome驱动程序中打开新窗口.

//The script that will will open a new blank window
//If you want to open a link new tab, replace 'about:blank' with a link
String a = "window.open('about:blank','_blank');";
((JavascriptExecutor)driver).executeScript(a);
Run Code Online (Sandbox Code Playgroud)

要在标签之间切换,请阅读此处


Rip*_*sim 7

您可以将以下代码与Java搭配使用Selenium WebDriver:

driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
Run Code Online (Sandbox Code Playgroud)

通过使用JavaScript:

WebDriver driver = new FirefoxDriver();//FF or any other Driver
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("window.open()");
Run Code Online (Sandbox Code Playgroud)


Ish*_*hah 7

要使用JavascriptExecutor打开新标签页,

((JavascriptExecutor) driver).executeScript("window.open()");
ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
driver.switchTo().window(tabs.get(1));
Run Code Online (Sandbox Code Playgroud)

将根据索引控制标签:

driver.switchTo().window(tabs.get(1));
Run Code Online (Sandbox Code Playgroud)

主选项卡上的驱动程序控制:

driver.switchTo().window(tabs.get(0));
Run Code Online (Sandbox Code Playgroud)


Mat*_*tW. 7

这里几乎所有答案都已过时。

(红宝石示例)

WebDriver 现在支持打开选项卡:

browser = Selenium::WebDriver.for :chrome
new_tab = browser.manage.new_window
Run Code Online (Sandbox Code Playgroud)

将打开一个新选项卡。打开一个窗口实际上已经成为非标准情况:

browser.manage.new_window(:window)
Run Code Online (Sandbox Code Playgroud)

选项卡或窗口不会自动获得焦点。要切换到它:

browser.switch_to.window new_tab
Run Code Online (Sandbox Code Playgroud)


小智 5

尝试使用FireFox浏览器.

/*  Open new tab in browser */
public void openNewTab()
{
    driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t");
    ArrayList<String> tabs = new ArrayList<String> (driver.getWindowHandles());
    driver.switchTo().window(tabs.get(0));
}
Run Code Online (Sandbox Code Playgroud)