Todavía estoy aprendiendo y en respuesta a una de mis preguntas: aquí se me dijo que podría deberse a que el elemento en cuestión no está a la vista.
Revisé la documentación y SO, aquí estaba la respuesta más relevante: aquí
Puede usar la clase “org.openqa.selenium.interactions.Actions” para moverse a un elemento:
WebElement element = driver.findElement(By.id("my-id")); Actions actions = new Actions(driver); actions.moveToElement(element); ## actions.click(); actions.perform();
Cuando trato de usar lo anterior para desplazarme al elemento: Dice WebElement no definido.
Creo que esto es porque no he importado el módulo relevante. ¿Alguien puede señalar lo que se supone que debo importar?
Edición: Como lo señaló alecxe, este era el código Java.
Pero mientras tanto, justo después de intentar resolverlo durante algún tiempo. He descubierto el método de importación para WebElement:
from selenium.webdriver.remote.webelement import WebElement
Podría ayudar a alguien como yo.
El cómo de esto también es una buena lección, OMI:
Fui a: Documentación La
class selenium.webdriver.remote.webelement.WebElement(parent, id_, w3c=False)
Necesita ser separado en el formulario de comando mencionado anteriormente.
Estás intentando ejecutar código Java con Python. En Python / Selenium, las org.openqa.selenium.interactions.Actions
se reflejan en la clase ActionChains
:
from selenium.webdriver.common.action_chains import ActionChains element = driver.find_element_by_id("my-id") actions = ActionChains(driver) actions.move_to_element(element).perform()
O también puede “desplazarse a la vista” a través de scrollIntoView()
:
driver.execute_script("arguments[0].scrollIntoView();", element)
Si te interesan las diferencias:
No es una respuesta directa a la pregunta (no se trata de Actions
), pero también te permite desplazarte fácilmente al elemento requerido:
element = driver.find_element_by_id('some_id') element.location_once_scrolled_into_view
Esto realmente intenta devolverle las coordenadas ( x
, y
) del elemento en la página, pero también se desplaza hacia la derecha hasta el elemento objective
Hay otra opción para desplazar la página al elemento requerido si el elemento tiene el atributo "id"
Si desea navegar a la página y desplazarse hacia abajo al elemento con @id
, puede hacerlo automáticamente agregando #element_id
a la URL …
Ejemplo
Supongamos que necesitamos navegar a la documentación de Selenium Waits y desplazarnos hacia la sección “Espera implícita”. Podemos hacer
driver.get('https://selenium-python.readthedocs.io/waits.html')
y añada código para desplazarse … O use
driver.get('https://selenium-python.readthedocs.io/waits.html#implicit-waits')
para navegar a la página Y desplazar la página automáticamente al elemento con id="implicit-waits"
(
)