Cambiar de pestaña usando Selenium WebDriver con Java

Resuelto Umesh Kumar asked hace 12 años • 27 respuestas

Usando Selenium WebDriver con Java. Estoy intentando automatizar una funcionalidad en la que tengo que abrir una nueva pestaña, realizar algunas operaciones allí y volver a la pestaña anterior (Principal). Utilicé la manija del interruptor pero no funciona. Y una cosa extraña es que las dos pestañas tienen el mismo identificador de ventana, por lo que no puedo cambiar entre pestañas.

Sin embargo, cuando lo intento con diferentes ventanas de Firefox, funciona, pero para la pestaña no funciona.

¿Cómo puedo cambiar de pestaña? O, ¿cómo puedo cambiar de pestaña sin usar el identificador de ventana, ya que en mi caso el identificador de ventana es el mismo para ambas pestañas?

(He observado que cuando abres diferentes pestañas en la misma ventana, el identificador de la ventana sigue siendo el mismo)

Umesh Kumar avatar Oct 04 '12 21:10 Umesh Kumar
Aceptado
    psdbComponent.clickDocumentLink();
    ArrayList<String> tabs = new ArrayList<String> (driver.getWindowHandles());
    driver.switchTo().window(tabs.get(1));
    driver.close();
    driver.switchTo().window(tabs.get(0));

Este código funcionó perfectamente para mí. Pruébalo. Siempre debe cambiar el controlador a una pestaña nueva antes de querer hacer algo en una pestaña nueva.

Sireesha Middela avatar Apr 08 '2014 17:04 Sireesha Middela

Esta es una solución simple para abrir una nueva pestaña, cambiarle el foco, cerrar la pestaña y devolver el foco a la pestaña anterior/original:

@Test
public void testTabs() {
    driver.get("https://business.twitter.com/start-advertising");
    assertStartAdvertising();

    // considering that there is only one tab opened in that point.
    String oldTab = driver.getWindowHandle();
    driver.findElement(By.linkText("Twitter Advertising Blog")).click();
    ArrayList<String> newTab = new ArrayList<String>(driver.getWindowHandles());
    newTab.remove(oldTab);
    // change focus to new tab
    driver.switchTo().window(newTab.get(0));
    assertAdvertisingBlog();

    // Do what you want here, you are in the new tab

    driver.close();
    // change focus back to old tab
    driver.switchTo().window(oldTab);
    assertStartAdvertising();

    // Do what you want here, you are in the old tab
}

private void assertStartAdvertising() {
    assertEquals("Start Advertising | Twitter for Business", driver.getTitle());
}

private void assertAdvertisingBlog() {
    assertEquals("Twitter Advertising", driver.getTitle());
}
Jordan Silva avatar May 14 '2013 11:05 Jordan Silva

Existe una diferencia en cómo el controlador web maneja diferentes ventanas y cómo maneja diferentes pestañas.

Caso 1:
en caso de que haya varias ventanas, el siguiente código puede ayudar:

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


Caso 2:
en caso de que haya varias pestañas en la misma ventana, solo habrá un identificador de ventana. Por lo tanto, cambiar entre identificadores de ventana mantiene el control en la misma pestaña.
En este caso, es más útil usar Ctrl + \t (Ctrl + Tab) para cambiar entre pestañas.

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

Puede encontrar un código de muestra detallado aquí:
http://design-interviews.blogspot.com/2014/11/switching-between-tabs-in-same-browser-window.html

Sourabh avatar Nov 27 '2014 15:11 Sourabh

Solución alterna

Supuesto : Al hacer clic en algo en su página web, se abre una nueva pestaña.

Utilice la siguiente lógica para cambiar a la segunda pestaña.

new Actions(driver).sendKeys(driver.findElement(By.tagName("html")), Keys.CONTROL).sendKeys(driver.findElement(By.tagName("html")),Keys.NUMPAD2).build().perform();

De la misma manera, puedes volver a la primera pestaña.

new Actions(driver).sendKeys(driver.findElement(By.tagName("html")), Keys.CONTROL).sendKeys(driver.findElement(By.tagName("html")),Keys.NUMPAD1).build().perform();
Santoshsarma avatar Oct 04 '2012 15:10 Santoshsarma