Comment ouvrir un nouvel onglet avec Selenium WebDriver?
Je veux ouvrir plusieurs liens dans de nouveaux onglets. Cela consiste à terminer les tâches de validation de la construction le plus rapidement possible. Ainsi, dans chaque nouvel onglet, tous les liens liés au test de fumée peuvent être ouverts, puis dans chaque onglet correspondant à une exigence de test de fumée, nous pouvons effectuer le test de cohérence.
Code:
WebDriver wd = new FirefoxDriver();
wd.get("http://www.gmail.com");
wd.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
wd.manage().window().maximize();
//To open a new tab
Robot r = new Robot();
r.keyPress(KeyEvent.VK_CONTROL);
r.keyPress(KeyEvent.VK_T);
r.keyRelease(KeyEvent.VK_CONTROL);
r.keyRelease(KeyEvent.VK_T);
//To switch to the new tab
ArrayList<String> tabs = new ArrayList<String>(wd.getWindowHandles());
wd.switchTo().window(tabs.get(1));
//To navigate to new link/URL in 2nd new tab
wd.get("http://facebook.com");
La seule façon d'ouvrir des liens dans de nouveaux onglets consiste à simuler des raccourcis clavier. Ce qui suit est vrai dans FFX, Chrome et IE
Selenium n'a (actuellement) aucun concept d'onglets dans une fenêtre de navigateur. Par conséquent, pour ouvrir l'onglet et le tester, vous DEVEZ utiliser l'option 3.
Le code suivant exécute l'option 3. puis ferme immédiatement ce nouvel onglet. (En C #)
new Actions(WebDriver)
.KeyDown(Keys.Control)
.KeyDown(Keys.Shift)
.Click(tab)
.KeyUp(Keys.Shift)
.KeyUp(Keys.Control)
.Perform();
new Actions(WebDriver)
.SendKeys(Keys.Control + "w")
.Perform();
Vous pouvez aussi utiliser:
.MoveToElement(tab)
.Click()
au milieu de la première option, et
.KeyDown(Keys.Control)
.KeyDown("w")
.KeyUp("w")
.KeyUp(Keys.Control)
dans le second.
/ * Ouvre un nouvel onglet dans le navigateur * /
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));
}
Nous pouvons utiliser la classe Actions de WebDriver. Voir le code suivant:
WebDriver driver = new FirefoxDriver();
driver.get("<provide URL>");
WebElement link = driver.findElement(locator);
Actions builder = new Actions(driver);
Action openLinkInNewTab = builder
.moveToElement(link)
.sendKeys(link, Keys.CONTROL)
.click(link)
.keyUp(Keys.CONTROL)
.build();
openLinkInNewTab.perform();
Cela peut être mis en boucle pour plusieurs liens.
import Java.util.concurrent.TimeUnit;
import org.openqa.Selenium.By;
import org.openqa.Selenium.Keys;
import org.openqa.Selenium.WebDriver;
import org.openqa.Selenium.firefox.FirefoxDriver;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import Java.awt.Robot;
import Java.awt.event.KeyEvent;
import Java.awt.AWTException;
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();
//perform required actions on tab 1.
driver.findElement(By.xpath("//input[@id='6']")).click();
driver.findElement(By.xpath("//input[@id='plus']"));
driver.findElement(By.xpath("//input[@id='3']"));
driver.findElement(By.xpath("//input[@id='equals']"));
//Call switchToTab() method to switch to 2nd tab.
switchToTab();
//Call switchToTab() method to switch to 1st 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 provient de THIS BLOG POST
// To open a new tab to establish second player connection
((JavascriptExecutor)driver).executeScript("window.open('about:blank', '-blank')");
// To switch to the new tab
ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
driver.switchTo().window(tabs.get(1));
// To navigate to new link/URL in 2nd new tab
driver.get("http://localhost:8080");
J'ai fait ça et ça a fonctionné parfaitement!