¿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.