java selenium selenium-webdriver frames webdriverwait

¿Es posible cambiar a un elemento en un marco sin usar driver.switchTo(). Frame("frameName") en Selenium Webdriver Java?



selenium-webdriver frames (2)

En palabras simples

No , no sería posible acceder a los elementos sin cambiar al <iframe> deseado, es decir, sin usar driver.switchTo().frame()

Para cambiar al marco deseado, debe usar cualquiera de los siguientes:

  • Cambiar a través del nombre del marco :

    driver.switchTo().frame("frame_name");

  • Cambiar a través de la ID de trama :

    driver.switchTo().frame("frame_id");

  • Cambiar a través del índice de cuadros :

    driver.switchTo().frame(1);

  • Cambiar a través de WebElement :

    driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@attribute=''value'']")));

  • Cambiar al marco principal :

    driver.switchTo().parentFrame();

  • Cambiar al contenido predeterminado :

    driver.switchTo().defaultContent();

Pero según las mejores prácticas , siempre debe inducir a WebDriverWait para que el marco deseado esté disponible y cambiarlo de la siguiente manera:

  • Cambiar a través del nombre del marco :

    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.name("frame_name")));

  • Cambiar a través de la ID de trama :

    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("frame_id")));

  • Cambie a través de Frame cssSelector :

    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("frame_cssSelector")));

  • Cambiar a través de Frame xpath :

    new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("frame_xpath")));

Tengo varios marcos anidados y necesito acceder a los elementos debajo de estos. Como estos marcos son dinámicos, no puedo acceder a estos elementos.

¿Es posible para mí acceder a los elementos sin usar driver.switchTo().frame() ?

¿Te gusta usar xpath directamente o jquery, javascript o algo así? Cualquier sugerencia es bienvenida


No creo que pueda cambiar a un marco sin usar driver.switchTo.frame (), cuando tiene varios marcos.

Pero puede usar el xpath como se muestra a continuación con la ID que contiene para los marcos dinámicos:

"//iframe[contains(@id,''frame'')]"

(o)

Puede intentar usar el atributo src del marco en su xpath.

(o)

Puede encontrar el número de fotogramas o marcos flotantes utilizando xpath a continuación, si su posición de fotograma es la misma:

int noofframes=driver.findelements(By.tagName(“iframe”)).size();

Y usando el índice puede cambiar a un marco particular y luego puede tratar de encontrar los elementos en el marco.

driver.switchTo.frame(i);

Espero que esto ayude.