python - select frame in selenium
Python Selenium(esperando el marco, las búsquedas de elementos) (1)
Puede usar WebDriverWait
:
from contextlib import closing
from selenium.webdriver import Chrome as Browser
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import NoSuchFrameException
def frame_available_cb(frame_reference):
"""Return a callback that checks whether the frame is available."""
def callback(browser):
try:
browser.switch_to_frame(frame_reference)
except NoSuchFrameException:
return False
else:
return True
return callback
with closing(Browser()) as browser:
browser.get(url)
# wait for frame
WebDriverWait(browser, timeout=10).until(frame_available_cb("frame name"))
Tengo estos incluye:
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
Navegador configurado a través de
browser = webdriver.Firefox()
browser.get(loginURL)
Sin embargo, a veces lo hago
browser.switch_to_frame("nameofframe")
Y no funcionará (a veces lo hace, a veces no funciona).
No estoy seguro de si esto se debe a que Selenium no está esperando que las páginas se carguen antes de ejecutar el resto del código o qué. ¿Hay alguna forma de forzar la carga de una página web?
Porque a veces haré algo como
browser.find_element_by_name("txtPassword").send_keys(password + Keys.RETURN)
#sends login information, goes to next page and clicks on Relevant Link Text
browser.find_element_by_partial_link_text("Relevant Link Text").click()
Y funcionará bien la mayor parte del tiempo, pero a veces obtendré un error que no puede encontrar el "Texto del enlace relevante" porque no puede "verlo" o alguna otra cosa similar.
Además, ¿hay una mejor manera de verificar si un elemento existe o no? Es decir, ¿cuál es la mejor manera de manejarlo?
browser.find_element_by_id("something")
¿Cuándo ese elemento puede o no existir?