2011-09-27 10 views
20

Ho un iframe che viene caricato quando faccio clic su una scheda in una pagina. Quando uso Firebug per guardare l'iframe su IE8, tutto quello che vedo è:Selenium e iframe

iframe id=tabContextFrame class=contextFrame contentEditable=inherit src=/xyz.dt?forward=show&layouttype=NoHeader&runid=1234 name=tabContextFrame url=/xyz.dt?forward=show&layouttype=NoHeader&runid=1234 scrolling=auto

e questo è it.The gerarchia di sotto del iframe non può essere visto. Voglio fare clic su un collegamento all'interno dell'iframe. Per trovare gli elementi all'interno dell'iframe, ho fatto un selenium.click("on the tab that loads the iframe") e poi selenium.getHtmlSource(). Da questa fonte, posso almeno individuare il mio link di interesse. Ho fatto un selenium.click("//span[text()='Link']") ma non sembra fare nulla. Qualche idea per favore?

Ecco il codice:

selenium.click("//span[text()='tab that loads iframe']"); 
Thread.sleep(5000); 
selenium.selectFrame("tabContextFrame");   
selenium.mouseOver("//span[text()='Link']"); 
selenium.mouseDown("//span[text()='Link']"); 
selenium.mouseUp("//span[text()='Link']"); 
Thread.sleep(5000); 
selenium.selectFrame("null"); 
+1

Hai provato il selenio 2.0 con il driver web? U può usare driver.SwitchTo(). Frame() – Sudara

+0

possibile duplicato di [gestione iframe nel webdriver] (http://stackoverflow.com/questions/9942928/handling-iframe-in-webdriver) – Innovation

risposta

38

sto cercando di indovinare che si sta utilizzando Selenium 1.0. Hai guardato Selenium 2.0 e WebDriver. Ho trovato quanto segue e ha funzionato per me:

Q: Come si digita in un iframe contentEditable? A: Partendo dal presupposto che l'iframe si chiama "pippo":

driver.switchTo().frame("foo"); 
WebElement editable = driver.switchTo().activeElement(); 
editable.sendKeys("Your text here"); 

A volte questo non funziona, e questo perché l'iframe non ha alcun contenuto. Su Firefox è possibile eseguire il seguente prima "SendKeys":

((JavascriptExecutor) driver).executeScript("document.body.innerHTML = '<br>'"); 

Questo è necessario perché l'iframe non ha alcun contenuto di default: non c'è niente di inviare input da tastiera a. Questa chiamata al metodo inserisce un tag vuoto , che imposta tutto correttamente.

Ricordarsi di passare fuori della cornice, una volta che hai finito (come tutti gli altri interazioni sarà con questo telaio specifico):

driver.switchTo().defaultContent(); 

Ho trovato questo su http://code.google.com/p/selenium/wiki/FrequentlyAskedQuestions

0

Usa conducente . .switchTo() defaultContent(); prima fai le tue operazioni

Problemi correlati