Quindi, ero assolutamente sconcertato su come farlo in Selenium, e non riuscivo a trovare la risposta da nessuna parte, quindi sto condividendo la mia esperienza.selezionando un iframe con selenio di pitone
Stavo cercando di selezionare un iframe e di non avere fortuna (o comunque non ripetibile). Il codice HTML si presentava così:
<iframe id="upload_file_frame" width="100%" height="465px" frameborder="0" framemargin="0" name="upload_file_frame" src="/blah/import/">
<html>
<body>
<div class="import_devices">
<div class="import_type">
<a class="secondary_button" href="/blah/blah/?source=blah">
<div class="import_choice_image">
<img alt="blah" src="/public/images/blah/import/blah.png">
</div>
<div class="import_choice_text">Blah Blah</div>
</a>
</div>
</div>
</body>
</html>
Il codice python (che utilizza la libreria selenio) stava cercando di trovare questo iframe utilizzare questo:
@timed(650)
def test_pedometer(self):
sel = self.selenium
...
time.sleep(10)
for i in range(5):
try:
if sel.select_frame("css=#upload_file_frame"): break
except: pass
time.sleep(10)
else: self.fail("Cannot find upload_file_frame, the iframe for the device upload image buttons")
ripetuto fallisce con ogni combinazione di comandi selenio Potrei trovare Il successo occasionale non sarebbe riproducibile, quindi forse era una sorta di condizione di gara o qualcosa del genere? Non ho mai trovato il modo giusto per farlo nel selenio.
Faresti meglio a usare il getEval di Selenium comando (probabilmente "get_eval" nei collegamenti Python) invece del suo comando runScript. getEval non ritorna fino al completamento del codice JavaScript, mentre runScript semplice inserisce un elemento
Il comando selectFrame del selenio accetta tutti i localizzatori standard come
css=
, ma ha anche un set aggiuntivo di locatori che funzionano specificamente con gli elementi FRAME e IFRAME.Come the doc dice:
In generale, è Avrai maggiore fortuna nell'usare i localizzatori specializzati, soprattutto se stabilisci il contesto giusto per primo (ad esempio,
select_frame("relative=top"); select_frame("id=upload_file_frame");
).fonte
2011-09-24 14:31:05
Sì, selectFrame non ha funzionato per me. Non significa che non funzionerà per nessuno, ma ho trovato che effettivamente selezionare il frame circa una volta in 5. – rossdavidh
Non è necessario utilizzare JavascriptExecutor. Tutto quello che dovevo fare era interruttore nel telaio e quindi passare di nuovo fuori, in questo modo:
Finché si sta attenti a questo, non si avrà mai un problema. L'unica volta che uso sempre un JavascriptExecutor è di ottenere il focus sulla finestra poiché penso che l'uso di Javascript sia più affidabile in quel caso.
fonte
2013-05-09 23:42:06 djangofan
Questo ha funzionato per me con Python (v.2.7), WebDriver & Selenio durante il test con iframe e cercando di inserire i dati all'interno di un iframe:
fonte
2014-06-18 13:05:38
In qualche modo il WebDriver trova gli elementi nell'iframe durante la ricerca con xpath. Ho provato a trovare elementi tramite CSS, ID ma mi ha sempre dato un errore di elemento non esistente (errore di timeout in realtà perché ho usato il comando waitForElement). Non pensavo che la ricerca di elementi da parte di xpath avrebbe fatto la differenza, ma per fortuna ho provato quando ero a corto di idee. Molte grazie! – GOstrowsky
'driver.switch_to_frame()' ora è deprecato, usa 'driver.switch_to.frame()' –
Ecco un tutorial di lavoro che vi aiutano a capire come gestire iframe su una pagina web utilizzando il selenio WebDriver con Python: https://www.youtube.com/watch?v=sfdWF4vBZ2o
Questo comando viene utilizzato per gestire iframe: driver.switch_to.frame (frame_id)
fonte
2016-12-10 19:42:17
Se
iframe
è il nodo dinamica, è anche possibile attendere periframe
appeare nce esplicitamente e quindi passare ad esso utilizzandoExpectedConditions
:Se
iframe
non ha@id
o@name
può essere trovato come WebElement comune utilizzandodriver.find_element_by_xpath()
,driver.find_element_by_tag_name()
, ecc ..:Per torna da
iframe
:fonte
2018-02-11 08:19:11 Andersson