如何使用Selenium WebDriver与Java打开一个新选项卡?

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

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

String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,Keys.RETURN); driver.findElement(By.linkText("urlLink")).sendKeys(selectLinkOpeninNewTab); 

下面的代码将打开空的新标签。

 String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,"t"); driver.findElement(By.linkText("urlLink")).sendKeys(selectLinkOpeninNewTab); 

只适用于那些在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 

蟒蛇

 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() 

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

为什么不这样做

 driver.ExecuteScript("window.open('your url','_blank');"); 

尝试使用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)); } 

以下代码将在新窗口中打开链接

 String selectAll = Keys.chord(Keys.SHIFT,Keys.RETURN); driver.findElement(By.linkText("linkname")).sendKeys(selectAll); 

要使用Selenium WebDriver在现有的Chrome浏览器中打开一个新选项卡,您可以使用以下代码:

 driver.FindElement(By.CssSelector("body")).SendKeys(Keys.Control + "t"); string newTabInstance = driver.WindowHandles[driver.WindowHandles.Count-1].ToString(); driver.SwitchTo().Window(newTabInstance); driver.Navigate().GoToUrl(url); 

您可以使用Selenium WebDriver的Java使用以下代码:

 driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t"); 

我在Java和Firefox 44.0.2中使用Selenium 2.52.0。 不幸的是上述解决方案都不适合我。 问题是如果我调用driver.getWindowHandles()我总是得到1个单一的句柄。 不知何故,这对我来说是有道理的,因为Firefox是一个单一的过程,每个标签不是一个单独的过程。 但也许我错了。 无论如何,我尝试写我自己的解决方案:

  // open a new tab driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t"); //url to open in a new tab String urlToOpen = "https://url_to_open_in_a_new_tab"; Iterator<String> windowIterator = driver.getWindowHandles() .iterator(); //I always get handlesSize == 1, regardless how many tabs I have int handlesSize = driver.getWindowHandles().size(); //I had to grab the original handle String originalHandle = driver.getWindowHandle(); driver.navigate().to(urlToOpen); Actions action = new Actions(driver); // close the newly opened tab action.keyDown(Keys.CONTROL).sendKeys("w").perform(); // switch back to original action.keyDown(Keys.CONTROL).sendKeys("1").perform(); //and switch back to the original handle. I am not sure why, but //it just did not work without this, like it has lost the focus driver.switchTo().window(originalHandle); 

我用Ctrl + T组合打开一个新的标签,按Ctrl + W关闭它,并切换回原来的标签我用Ctrl + 1(第一个标签)。 我知道我的解决方案不是完美的,甚至不错,我也想与司机的switchTo电话切换,但正如我写的是不可能的,因为我只有一个句柄。 也许这对有相同情况的人会有所帮助。

我无法在Chrome中打开一个新标签一段时间了。 甚至driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t"); 没有为我工作。

我发现硒是专注于驱动程序是不够的,Windows也必须在前面的窗口。

我的解决方案是在chrome上调用一个提醒窗口,然后执行命令。 示例代码:

 ((JavascriptExecutor)driver).executeScript("alert('Test')"); driver.switchTo().alert().accept(); driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t"); 

nodejs的相同例子:

 var webdriver = require('selenium-webdriver'); ... driver = new webdriver.Builder(). withCapabilities(capabilities). build(); ... driver.findElement(webdriver.By.tagName("body")).sendKeys(webdriver.Key.COMMAND + "t"); 

如何打开一个新的,但更重要的是,你如何做新标签中的东西? Webdriver不会为每个选项卡添加一个新的WindowHandle,只能控制第一个选项卡。 所以,在选择一个新的选项卡(控制+选项卡号)后,在驱动程序上设置.DefaultContent()以将可见选项卡定义为您将要执行的选项卡。

Visual Basic

 Dim driver = New WebDriver("Firefox", BaseUrl) ' Open new tab - send Control T Dim body As IWebElement = driver.FindElement(By.TagName("body")) body.SendKeys(Keys.Control + "t") ' Go to a URL in that tab driver.GoToUrl("YourURL") ' Assuming you have m tabs open, go to tab n by sending Control + n body.SendKeys(Keys.Control + n.ToString()) ' Now set the visible tab as the drivers default content. driver.SwitchTo().DefaultContent() 

使用Selenium WebDriver在现有的Firefox浏览器中打开新选项卡

 FirefoxDriver driver = new FirefoxDriver(); driver.findElement(By.tagName("body")).sendKeys(Keys.CONTROL,"t"); 
  Actions at=new Actions(wd); at.moveToElement(we); at.contextClick(we).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ENTER).build().perform(); 
 //to open new tab in existing window driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t"); 

如何打开一个新的选项卡使用Selenium WebDriver与Java的铬?

 ChromeOptions options = new ChromeOptions(); options.addArguments("--disable-extensions"); driver = new ChromeDriver(options); driver.manage().window().maximize(); driver.navigate().to("https://google.com"); Robot robot = new Robot(); robot.keyPress(KeyEvent.VK_CONTROL); robot.keyPress(KeyEvent.VK_T); robot.keyRelease(KeyEvent.VK_CONTROL); robot.keyRelease(KeyEvent.VK_T); 

上面的代码将禁用第一个扩展,并使用机器人类新标签将打开。

 driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t"); ArrayList<String> tabs = new ArrayList<String> (driver.getWindowHandles()); driver.switchTo().window(tabs.get(0)); 

检查这个完整的例子,了解如何打开多个选项卡,并在选项卡之间切换,并在最后关闭所有选项卡

 public class Tabs { WebDriver driver; Robot rb; @BeforeTest public void setup() throws Exception { System.setProperty("webdriver.chrome.driver", "C:\\Users\\Anuja.AnujaPC\\Downloads\\chromedriver_win32\\chromedriver.exe"); WebDriver driver=new ChromeDriver(); driver.manage().window().maximize(); driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); driver.get("http://qaautomated.com"); } @Test public void openTab() { //Open tab 2 using CTRL + t keys. driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t"); //Open URL In 2nd tab. driver.get("http://www.qaautomated.com/p/contact.html"); //Call switchToTab() method to switch to 1st tab switchToTab(); //Call switchToTab() method to switch to 2nd tab. switchToTab(); } public void switchToTab() { //Switching between tabs using CTRL + tab keys. driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"\t"); //Switch to current selected tab's content. driver.switchTo().defaultContent(); } @AfterTest public void closeTabs() throws AWTException { //Used Robot class to perform ALT + SPACE + 'c' keypress event. rb =new Robot(); rb.keyPress(KeyEvent.VK_ALT); rb.keyPress(KeyEvent.VK_SPACE); rb.keyPress(KeyEvent.VK_C); } } 

这个例子是由这个网页给出的

在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); 

要切换标签,请点击此处

由于https://bugs.chromium.org/p/chromedriver/issues/detail?id=1465中存在错误,即使webdriver.switchTo实际上切换了选项卡,焦点仍保留在第一个选项卡上。; 您可以通过在switchWindow之后执行driver.get来确认这一点,并且看到第二个选项卡实际上转到新的URL而不是原始选项卡。

目前的工作是@ yardening2建议的。 使用js打开警报,然后使用webdriver接受它。

使用Selenium Webdriver处理浏览器窗口:

 String winHandleBefore = driver.getWindowHandle(); for(String winHandle : driver.getWindowHandles()) // Switch to new opened window { driver.switchTo().window(winHandle); } driver.switchTo().window(winHandleBefore); // move to previously opened window 
 driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t");// open in new tab driver.get("ur link");