web-dev-qa-db-fra.com

Comment ouvrir un nouvel onglet avec Selenium WebDriver et démarrer le lien?

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.

13
Harsh Nigam

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");
7
Alex Mathew

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

  1. Ctrl + t ouvrira un nouvel onglet vide et y mettra le focus.
  2. Maintenez la touche Ctrl enfoncée, puis cliquez sur le lien pour ouvrir le lien dans un nouvel onglet tout en laissant le focus sur l'onglet existant.
  3. En maintenant Ctrl ET Maj, cliquer ensuite ouvrira le lien dans un nouvel onglet ET déplacera le focus sur le nouvel onglet.
  4. Ctrl + w fermera l'onglet en cours et basculera vers le dernier onglet ouvert (notez que Ctrl + W c'est-à-dire que Ctrl + Maj + w ferme tous les onglets!)

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.

4
Brondahl

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

}
2
Prasanth RJ

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.

1
Sitam Jana
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

1
anuja jain
// 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!

0
Cowarrior