<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("/libs/cq/ui/widgets/themes/default/ext/form/text-bg.gif"); background-repeat: repeat-x; background-attachment: fixed;">
<p>4t43t4<br></p>
</body >
</iframe>
</iframe>
</div>
Dans ce scénario, il y a un iframe
sous iframe
. Et je dois sélectionner le iframe
extérieur pour aller au iframe
intérieur et écrire dans le corps qui se trouve dans le iframe
intérieur.
Ensuite, je dois sortir du iframe
intérieur au iframe
extérieur et cliquer sur le bouton OK (qui se trouve dans le iframe
extérieur).
Voici mon code
/*Line 1 */ driver.switchTo().frame("cq-cf-frame");
/* 2 */ driver.findElement(By.css("#extdd-9 > div.tblRow > input.edititem").click();
/* 3 */ driver.switchTo().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();
Voici mon problème:
Mon code de test fonctionne parfaitement jusqu'au numéro de ligne 4, c'est-à-dire l'écriture dans le corps, mais je veux sortir de l'intérieur vers l'extérieur iframe
, il est indiqué que l'élément //button[text()='OK']
n'est pas trouvé.
J'ai essayé d'utiliser index, parent, parent, mais je n'ai pas eu de chance.
NOTE: Si je ne sélectionne pas le cadre interne (cq-gen379
). Je peux cliquer sur le bouton OK.
Dans Webdriver, vous devez utiliser driver.switchTo().defaultContent();
pour sortir d'un cadre. Vous devez d'abord sortir de tous les cadres, puis basculer à nouveau dans le cadre extérieur.
// 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();
Vous devez sortir de l'Iframe avec le code suivant:
driver.switchTo().frame(driver.findElement(By.id("frameId")));
//do your stuff
driver.switchTo().defaultContent();
j'espère que ça t'as aidé
Vous devez d'abord trouver iframe
. Vous pouvez le faire en utilisant la déclaration suivante.
WebElement iFrame= driver.findElement(By.tagName("iframe"));
Ensuite, vous pouvez y accéder en utilisant la méthode switchTo
sur vous WebDriver
objet.
driver.switchTo().frame(iFrame);
Et pour revenir au cadre parent, vous pouvez utiliser switchTo().parentFrame()
ou si vous souhaitez revenir au cadre principal (ou à la plupart des parents), vous pouvez utiliser switchTo().defaultContent();
.
driver.switchTo().parentFrame(); // to move back to parent frame
driver.switchTo().defaultContent(); // to move back to most parent or main frame
J'espère que ça aide.
Pour revenir au cadre parent, utilisez:
driver.switchTo().parentFrame();
Pour revenir au premier/cadre principal, utilisez:
driver.switchTo().defaultContent();
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");
Approche ci-dessous pour la gestion des images: lorsqu'aucun identifiant ou nom n'est donné en cas d'image imbriquée
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();
Sélénium Web Gestion des cadres
Il est impossible de cliquer iframe directement via XPath car il s'agit d'un iframe. Nous devons d’abord basculer sur le cadre puis cliquer avec xpath.
driver.switchTo().frame()
a plusieurs surcharges.
driver.switchTo().frame(name_or_id)
Ici votre iframe
n'a pas d'identifiant ni de nom, donc pas pour vous.
driver.switchTo().frame(index)
C’est la dernière option à choisir car l’utilisation d’index n’est pas assez stable comme vous pouvez l’imaginer. S'il s'agit de votre seul iframe dans la page, essayez driver.switchTo().frame(0)
driver.switchTo().frame(iframe_element)
Le plus commun. Vous localisez votre iframe comme d’autres éléments, puis vous le transmettez à la méthode.
driver.switchTo().
defaultContent(); [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();
Test 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>
Conversion de RC en Web-Driver Java. lien .
<frame>
est un élément HTML qui définit une zone particulière dans laquelle un autre document HTML peut être affiché. Un cadre doit être utilisé dans un <frameset>
. "Obsolète. Ne pas utiliser dans les nouveaux sites Web.