examples - selenium python example code
¿Desplazarse al elemento usando webdriver? (5)
Además de
move_to_element()
y
scrollIntoView()
, quería plantear el siguiente código que intenta
centrar
el elemento en la vista:
web_element = self.selib.find_element(locator)
self.selib.execute_javascript(
"ARGUMENTS",
web_element,
"JAVASCRIPT",
''arguments[0].scrollIntoView({behavior: "instant", block: "start", inline: "start"});''
)
Todavía estoy aprendiendo y en respuesta a una de mis preguntas: here , me dijeron que podría ser debido porque el elemento en cuestión no está a la vista.
Miré a través de la documentación y SO, aquí estaba la respuesta más relevante: here
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 se debe a que no he importado el módulo relevante. ¿Alguien puede señalar lo que se supone que debo importar?
Editar: como señaló alecxe, este era el código java.
Pero mientras tanto, justo después de tratar de resolverlo por 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 es también una buena lección, en mi opinión:
Fui a: Documentation El
class selenium.webdriver.remote.webelement.WebElement(parent, id_, w3c=False)
Debe separarse 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 estás interesado en las diferencias:
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
Digamos que necesitamos navegar a la documentación de Selenium Waits y desplazar la página hacia abajo a la sección "Espera implícita". Podemos hacer
driver.get(''https://selenium-python.readthedocs.io/waits.html#implicit-waits'')
y agregue 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"
(
<div class="section" id="implicit-waits">...</div>
)
No es una respuesta directa a una pregunta (no se trata de
Actions
), pero también le permite desplazarse fácilmente al elemento requerido:
element = driver.find_element_by_id(''some_id'')
element.location_once_scrolled_into_view
En realidad, esto tiene la intención de devolverle las coordenadas (
x
,
y
) del elemento en la página, pero también desplazarse hacia abajo a la derecha al elemento de destino
Puede desplazarse al elemento utilizando javascript a través del método
execute_javascript
.
Por ejemplo, así es como lo hago usando SeleniumLibrary en Robot Framework:
driver.get(''https://selenium-python.readthedocs.io/waits.html'')