switchto switch java selenium iframe selenium-webdriver

switch - select frame selenium java



Cómo manejar el iframe en Selenium WebDriver usando Java (7)

<div> <iframe id="cq-cf-frame "> <iframe id="gen367"> <body spellcheck="false" id="CQrte" style="height: 255px; font-size: 12px; font-family:tahoma,arial,helvetica,sans-serif; background-image: url(&quot;/libs/cq/ui/widgets/themes/default/ext/form/text-bg.gif&quot;); background-repeat: repeat-x; background-attachment: fixed;"> <p>4t43t4<br></p> </body > </iframe> </iframe> </div>

En este escenario, hay un iframe en iframe . Y tengo que seleccionar el iframe externo para ir al iframe interno y escribir en el cuerpo que está en el iframe interno.

A continuación, tengo que salir del iframe interno al iframe externo y hacer clic en el botón OK (que está en el iframe externo).

El siguiente es mi código

/*Line 1 */ driver.switchTo().frame("cq-cf-frame"); /* 2 */ driver.findElement(By.css("#extdd-9 > div.tblRow > input.edititem").click(); /* 3 */ driver.switchT().Frame("cq-gen379"); /* 4 */ driver.findElement(By.id("CQrte").sendKeys("Tnx"); /* 5 */ selenium.selectFrame("relative=up"); /* 6 */ driver.findElement(By.xpath("//button[text()=''OK'']")).click();

El siguiente es mi problema:

Mi código de prueba está funcionando bien hasta la línea número 4, es decir, escribiendo en el cuerpo, pero quiero salir del iframe interno al exterior, dice que no se encontró el //button[text()=''OK''] del elemento //button[text()=''OK''] .

Intenté usar index, parent, relative, pero no tuve suerte.

NOTA: Si no selecciono el cuadro interno (cq-gen379). Puedo hacer clic en el botón OK .


En Webdriver, debe usar driver.switchTo().defaultContent(); para salir de un marco. Primero debe salir de todos los marcos y luego volver a cambiar al marco externo.

// between step 4 and step 5 // remove selenium.selectFrame("relative=up"); driver.switchTo().defaultContent(); // you are now outside both frames driver.switchTo().frame("cq-cf-frame"); // now continue step 6 driver.findElement(By.xpath("//button[text()=''OK'']")).click();


Para volver al marco principal, use:

driver.switchTo().parentFrame();

Para volver al primer marco / principal, use:

driver.switchTo().defaultContent();


Por debajo del enfoque de manejo de cuadros: cuando no se proporciona una identificación o nombre en caso de cuadro anidado

WebElement element =driver.findElement(By.xpath(".//*[@id=''block-block19'']//iframe")); driver.switchTo().frame(element); driver.findElement(By.xpath(".//[@id=''carousel'']/li/div/div[3]/a")).click();


Primero debe encontrar iframe . Puedes hacerlo usando la siguiente declaración.

WebElement iFrame= driver.findElement(By.tagName("iframe"));

Luego, puede usar el método switchTo en su objeto WebDriver .

driver.switchTo().frame(iFrame);

Y para volver al marco principal, puede usar switchTo().parentFrame() o si desea volver al marco principal (o la mayoría de los padres), puede usar switchTo().defaultContent(); .

driver.switchTo().parentFrame(); // to move back to parent frame driver.switchTo().defaultContent(); // to move back to most parent or main frame

Espero eso ayude.


Tienes que volver al Iframe con el siguiente código:

driver.switchTo().frame(driver.findElement(By.id("frameId"))); //do your stuff driver.switchTo().defaultContent();

Espero que ayude


Selenium Web Driver Manejo de marcos
Es imposible hacer clic en iframe directamente a través de XPath, ya que es un iframe. Primero tenemos que cambiar al marco y luego podemos hacer clic usando xpath.

driver.switchTo().frame() tiene múltiples sobrecargas.

  1. driver.switchTo().frame(name_or_id)
    Aquí su iframe no tiene identificación o nombre, por lo que no es para usted.

  2. driver.switchTo().frame(index)
    Esta es la última opción para elegir, porque el uso del índice no es lo suficientemente estable como podría imaginarse. Si este es tu único iframe en la página, prueba driver.switchTo().frame(0)

  3. driver.switchTo().frame(iframe_element)
    El más común. Localiza su iframe como otros elementos, luego páselo al método.

driver.switchTo(). defaultContent (); [parentFrame, defaultContent, frame] (); [parentFrame, defaultContent, frame]

// Based on index position: int frameIndex = 0; List<WebElement> listFrames = driver.findElements(By.tagName("iframe")); System.out.println("list frames "+listFrames.size()); driver.switchTo().frame(listFrames.get( frameIndex )); // XPath|CssPath Element: WebElement frameCSSPath = driver.findElement(By.cssSelector("iframe[title=''Fill Quote'']")); WebElement frameXPath = driver.findElement(By.xpath(".//iframe[1]")); WebElement frameTag = driver.findElement(By.tagName("iframe")); driver.switchTo().frame( frameCSSPath ); // frameXPath, frameTag driver.switchTo().frame("relative=up"); // focus to parent frame. driver.switchTo().defaultContent(); // move to the most parent or main frame // For alert''s Alert alert = driver.switchTo().alert(); // Switch to alert pop-up alert.accept(); alert.dismiss();

Prueba de XML:

<html> <IFame id=''1''>... parentFrame() « context remains unchanged. <IFame1> | -> <IFrame id=''2''>... parentFrame() « Change focus to the parent context. <IFame1> </html> </html> <frameset cols="50%,50%"> <Fame id=''11''>... defaultContent() « driver focus to top window/first frame. <html> | -> <Frame id=''22''>... defaultContent() « driver focus to top window/first frame. <Fame11> frame("relative=up") « focus to parent frame. <Fame11> </frameset> </html>

Conversión de RC a comandos Java de Web-Driver. link .

<frame> es un elemento HTML que define un área particular en la que se puede mostrar otro documento HTML. Se debe usar un marco dentro de un <frameset> . « Deprecated . No es para usar en nuevos sitios web.


WebDriver driver=new FirefoxDriver(); driver.get("http://www.java-examples.com/java-string-examples"); Thread.sleep(3000); //Switch to nested frame driver.switchTo().frame("aswift_2").switchTo().frame("google_ads_frame3");