web-dev-qa-db-fra.com

Sélénium plusieurs onglets à la fois

Je travaille avec Selenium et je me demande s’il est possible d’utiliser plusieurs TAB à la fois? Je ne souhaite pas utiliser plusieurs instances de navigateur (c'est-à-dire 2 copies de IE pun). SI CELA IS N'EST PAS possible, comment procéder pour passer d'un onglet à l'autre, qui s'exécutent de manière séquentielle? 

Merci!

15
Trevor Tiernan

Si un lien ouvre une nouvelle fenêtre/onglet, vous pouvez utiliser driver.switchTo().window();

Cependant, si vous voulez exécuter quelque chose sur plusieurs fenêtres, je vous recommande d’avoir plusieurs instances de webdriver. Il est beaucoup plus facile à gérer et est pris en charge (il existe des solutions de contournement lors de l’ouverture d’un nouvel onglet/fenêtre, telles que la pression d’un raccourci clavier ouvrant une nouvelle fenêtre, mais elles ne sont pas prises en charge).

Si vous souhaitez que plusieurs threads agissent tous sur la même instance de pilote, mais sur des onglets différents, cela n'est PAS possible.

27
Nathan Merrill

Il est possible de passer d'un onglet à l'autre sans avoir plusieurs instances de navigateur.
Il existe une différence entre le pilote Web et les différents onglets.

Cas 1:
S'il existe plusieurs fenêtres, le code suivant peut vous aider:

//Get the current window handle
String windowHandle = driver.getWindowHandle();

//Get the list of window handles
ArrayList tabs = new ArrayList (driver.getWindowHandles());
System.out.println(tabs.size());
//Use the list of window handles to switch between windows
driver.switchTo().window(tabs.get(0));

//Switch back to original window
driver.switchTo().window(mainWindowHandle);


Cas 2:
S'il y a plusieurs onglets dans la même fenêtre, il n'y a qu'un seul handle de fenêtre. Par conséquent, la commutation entre les poignées de fenêtre conserve le contrôle dans le même onglet.
Dans ce cas, il est plus utile d’utiliser Ctrl +\t (Ctrl + Tab) pour passer d’un onglet à l’autre.

//Open a new tab using Ctrl + t
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t");
//Switch between tabs using Ctrl + \t
driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"\t");

Vous trouverez un exemple de code détaillé ici:
http://design-interviews.blogspot.com/2014/11/switching-between-tabs-in-same-browser-window.html

8
Sourabh

Pour ouvrir plusieurs onglets:

driver = new ChromeDriver();
IJavaScriptExecutor jscript = driver as IJavaScriptExecutor;
for (int i = 0; i < 10; i++)
{                
  driver.Navigate().GoToUrl(this.baseURL);      
  jscript.ExecuteScript("window.open('{0}', '_blank');", this.baseURL);
}

Basculez entre eux:

for (int i = 0; i < driver.WindowHandles.Count; i++)
{ 
  driver.SwitchTo().Window(driver.WindowHandles[i])]);
}
2
Marisco

Essayez avec le code ci-dessous.

    String oldTab = driver.getWindowHandle();
    driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
    ArrayList<String> newTab = new ArrayList<String>(driver.getWindowHandles());
    newTab.remove(oldTab);
    driver.switchTo().window(newTab.get(0));
0
Rupam Dhar

si vous souhaitez exécuter plusieurs fenêtres simultanément, utilisez le threading avec plusieurs instances de IWebDriver

EX:

public void Work()
{
IWebDriver driver = new ChromeDriver("D:\\Drivers");
driver.Navigate().GoToUrl(URL);
\\Do the rest
}
public void Work2()
{
IWebDriver driver = new ChromeDriver("D:\\Drivers");
driver.Navigate().GoToUrl(URL2);
\\Do the rest
}

et appelez la fonction comme ceci:

Thread thread1 = new Thread(new ThreadStart(Work));
thread1.Start();
Thread thread2 = new Thread(new ThreadStart(Work2));
thread2.Start();
0
Yahya Hussein