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