Comment ouvrir un nouvel onglet en utilisant Selenium WebDriver?

comment ouvrir un nouvel onglet dans le navigateur Firefox existant en utilisant Selenium WebDriver (A. K. A. Sélénium 2)?

74
demandé sur Liam 2013-07-09 15:47:55

24 réponses

le code ci-dessous ouvrira le lien dans le nouvel onglet.

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

le code ci-dessous ouvrira un nouvel onglet vide.

String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL,"t");
driver.findElement(By.linkText("urlLink")).sendKeys(selectLinkOpeninNewTab);
31
répondu Nagaraju Jampani 2013-10-18 05:17:16

juste pour tous ceux qui cherchent une réponse dans Ruby/Python/C# bindings (sélénium 2.33.0).

notez que les clés à envoyer dépendent de votre système D'exploitation, Par exemple, Mac utilise COMMAND + t , au lieu de CONTROL + t .

Ruby

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

Python

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();
        }
    }
}
70
répondu Yi Zeng 2014-02-14 20:51:34

Pourquoi pas

driver.ExecuteScript("window.open('your url','_blank');");
23
répondu kernowcode 2014-11-29 13:59:38

essayez ceci pour le navigateur 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));
}
5
répondu Prasanth RJ 2017-01-11 09:02:45

ci-dessous code ouvrira le lien dans la nouvelle fenêtre

String selectAll = Keys.chord(Keys.SHIFT,Keys.RETURN);
driver.findElement(By.linkText("linkname")).sendKeys(selectAll);
3
répondu Nagaraju Jampani 2013-10-18 05:19:48

pour ouvrir une nouvelle fenêtre dans Chrome Driver.

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

pour la commutation entre onglets, lire ici

3
répondu Junaid Khan 2017-05-23 12:34:38

vous pouvez utiliser le code suivant en utilisant Java avec Selenium WebDriver:

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

en utilisant JavaScript:

WebDriver driver = new FirefoxDriver();//FF or any other Driver
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("window.open()");
3
répondu Ripon Al Wasim 2018-04-24 09:59:12

pour ouvrir un nouvel onglet dans le navigateur Chrome existant en utilisant le WebDriver Selenium vous pouvez utiliser ce code:

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);
2
répondu user2000197 2015-11-24 07:49:36

J'utilise Selenium 2.52.0 en Java et Firefox 44.0.2. Malheureusement, aucune des deux solutions n'a fonctionné pour moi. Le problème est que si j'ai un appel du pilote.getWindowHandles() j'ai toujours 1 seule poignée. D'une certaine façon, cela a du sens pour moi car Firefox est un processus unique et chaque onglet n'est pas un processus séparé. Mais peut-être que je me trompe. Quoi qu'il en soit, j'essaie d'écrire ma propre solution:

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

j'ai utilisé Ctrl+t combinaison pour ouvrir un nouvel onglet Ctrl+w pour fermer, et pour revenir à l'onglet original I a utilisé Ctrl+1 (le premier onglet). Je suis conscient que ma solution n'est pas parfaite ou même bonne et je voudrais également passer avec l'appel de changement de conducteur, mais comme je l'ai écrit, ce n'était pas possible car je n'avais qu'une seule poignée. Peut-être que ce sera utile à quelqu'un avec la même situation.

1
répondu Gico 2016-03-05 22:02:03

j'ai eu du mal à ouvrir un nouvel onglet dans chrome pendant un moment. Même driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t"); n'a pas marché pour moi.

j'ai découvert qu'il ne suffit pas que le sélénium se concentre sur le pilote, Windows doit également avoir la fenêtre à l'avant.

ma solution était d'invoquer une alerte sur chrome qui mettrait la fenêtre à l'avant et ensuite exécuter la commande. code échantillon:

((JavascriptExecutor)driver).executeScript("alert('Test')");
driver.switchTo().alert().accept();
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t");
1
répondu yardening2 2016-03-22 08:16:34
//to open new tab in existing window
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t");
1
répondu mahi 2016-04-05 14:03:19

Comment ouvrir un nouvel onglet en utilisant Selenium WebDriver avec Java for chrome?

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

code ci-dessus désactivera premières extensions et en utilisant la classe de robot nouvel onglet s'ouvrira.

1
répondu Nikhil Shah 2016-08-17 13:51:16

même exemple pour nodejs:

var webdriver = require('selenium-webdriver');
...
driver = new webdriver.Builder().
                    withCapabilities(capabilities).
                    build();
...

driver.findElement(webdriver.By.tagName("body")).sendKeys(webdriver.Key.COMMAND + "t");
0
répondu gyss 2015-08-15 17:04:53

comment ouvrir un nouvel onglet, mais surtout, comment faire des choses dans ce nouvel onglet? Webdriver n'ajoute pas de Nouvelle WindowHandle pour chaque onglet, et n'a que le contrôle du premier onglet. Ainsi, après avoir sélectionné un nouvel ensemble d'onglets (Contrôle + nombre D'onglets).DefaultContent () sur le pilote pour définir l'onglet visible comme celui sur lequel vous allez travailler.

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()
0
répondu BClaydon 2015-09-02 23:31:43

pour ouvrir un nouvel onglet dans le navigateur Firefox existant en utilisant Selenium WebDriver

FirefoxDriver driver = new FirefoxDriver();
driver.findElement(By.tagName("body")).sendKeys(Keys.CONTROL,"t"); 
0
répondu vickisys 2015-10-09 09:27:37
 Actions at=new Actions(wd);
 at.moveToElement(we);
 at.contextClick(we).sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ENTER).build().perform();
0
répondu Alex Mathew 2016-04-05 13:40:19
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t");

ArrayList<String> tabs = new ArrayList<String> (driver.getWindowHandles());

driver.switchTo().window(tabs.get(0));
0
répondu Rajan.M 2016-12-06 12:48:39

cochez cet exemple complet pour comprendre comment ouvrir plusieurs onglets et basculer entre les onglets et à la fin fermer tous les onglets

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

cet exemple est donné par cette page web

0
répondu anuja jain 2017-01-11 08:17:10

dû à un bug dans https://bugs.chromium.org/p/chromedriver/issues/detail?id=1465 même si webdriver.switchTo fait en fait switch tabs, le focus est laissé sur le premier onglet. Vous pouvez le vérifier en faisant un pilote.obtenez après le switchWindow et voyez que le deuxième onglet va réellement à la nouvelle URL et pas l'onglet original.

C'est ce que @yardening2 a suggéré. Utilisez js pour ouvrir une alerte et ensuite utiliser webdriver pour l'accepter.

0
répondu anilwanted 2017-04-07 15:03:26

ce code fonctionne pour moi (sélénium 3.8.1, chromedriver=2.34.522940, chrome=63.0):

public void openNewTabInChrome() {

    driver.get("http://www.google.com");

    WebElement element = driver.findElement(By.linkText("Gmail"));
    Actions actionOpenLinkInNewTab = new Actions(driver);
    actionOpenLinkInNewTab.moveToElement(element)
            .keyDown(Keys.CONTROL) // MacOS: Keys.COMMAND
            .keyDown(Keys.SHIFT).click(element)
            .keyUp(Keys.CONTROL).keyUp(Keys.SHIFT).perform();


    ArrayList<String> tabs = new ArrayList(driver.getWindowHandles());
    driver.switchTo().window(tabs.get(1));
    driver.get("http://www.yahoo.com");
    //driver.close();
}
0
répondu Giang Phan 2018-01-12 16:35:34

Question : Comment ouvrir un nouvel onglet en utilisant Selenium WebDriver avec Java?

réponse : après avoir cliqué sur un lien, ouvrez un nouvel onglet.

si nous voulons gérer l'onglet nouvellement ouvert, alors nous avons besoin de gérer l'onglet en utilisant .switchTo ().fenêtre() commande.

passer à tab puis effectuer l'opération et revenir à l'onglet parent.

package test;

import java.util.ArrayList;

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.firefox.FirefoxDriver;

public class Tab_Handle {

    public static void main(String[] args) {

        System.setProperty("webdriver.gecko.driver", "geckodriver_path");

        WebDriver driver = new FirefoxDriver();

        driver.get("http://www.google.com");

        // Store all currently open tabs in Available_tabs
        ArrayList<String> Available_tabs = new ArrayList<String>(driver.getWindowHandles());

        // Click on link to open in new tab
        driver.findElement(By.id("Url_Link")).click();

        // Switch newly open Tab
        driver.switchTo().window(Available_tabs.get(1));

        // Perform some operation on Newly open tab
        // Close newly open tab after performing some operations.
        driver.close();

        // Switch to old(Parent) tab.
        driver.switchTo().window(Available_tabs.get(0));

    }

}
0
répondu sandeep shewale 2018-04-04 11:25:46

pour ouvrir un nouvel onglet en utilisant JavascriptExecutor,

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

contrôlera sur tab comme selon l'index:

driver.switchTo().window(tabs.get(1));

Pilote de contrôle sur l'onglet principal:

driver.switchTo().window(tabs.get(0));
0
répondu Ishita Shah 2018-08-08 10:02:21
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t");// open in new tab
driver.get("ur link");
-1
répondu liki 2017-09-04 14:16:27

manipulation de la fenêtre du navigateur à L'aide du Webdriver de sélénium:

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
-1
répondu Jainish Kapadia 2017-09-06 08:31:11