javascript - executescript - scrollIntoView vs moveToElement
selenium execute javascript python (1)
En Selenium WebDriver, hay dos métodos principales para colocar un elemento en un área visible :
-
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element); -
Usando la acción del navegador
moveToElement:Actions actions = new Actions(driver); actions.moveToElement(element); actions.perform();
¿Son equivalentes estos métodos y cuál debería preferirse?
scrollIntoView
El método DOM
scrollIntoView
solo desplaza el elemento a la vista.
Si
scrollIntoView
no puede desplazar el elemento a la vista, simplemente fallará en silencio.
scrollIntoView
un elemento invisible al inicio del
body
y lo llamé
scrollIntoView
.
No se desplazó nada pero no hubo error.
Tenga en cuenta que tiene más control sobre
cómo
se desplaza el elemento con
scrollIntoView
que con
moveToElement
.
Selenium solo está interesado en mostrar el elemento para que se pueda colocar el mouse sobre él.
No le dice nada sobre cómo lo va a hacer.
scrollIntoView
sin embargo, le permite, por ejemplo, especificar si desea que la parte superior o inferior del elemento se alinee con su ancestro desplazable.
(Ver
aquí
para más detalles).
moveToElement
El método Selenium
moveToElement
hace dos cosas: desplaza el elemento a la vista y mueve el mouse sobre el elemento.
También lo probé con elementos que no se pueden desplazar o mover porque no tienen coordenadas en la pantalla y tampoco obtuve ningún error aquí.
Elegir uno
De manera predeterminada, uso
moveToElement
, con las siguientes excepciones:
-
Si no desea afectar en absoluto a donde Selenium ha colocado el mouse pero desea desplazar algo a la vista (un poco extraño ... pero posible), entonces debe usar
scrollIntoView. -
Si necesita desplazar un elemento con el tipo de control que
scrollIntoViewle brinda (como la opción de alineación que mencioné anteriormente), debe usarlo en lugar demoveToElement. -
Hay casos en los que intentar simular el comportamiento del usuario a través de los comandos de Selenium no es posible o es muy costoso enviar una serie de comandos de Selenium. (Cada comando es un viaje de ida y vuelta a la red. Cuando el servidor de prueba en algún lugar a través de Internet, se suma). En tales casos, uso el
executeScriptdeexecuteScriptdeexecuteScript. En tal caso, puede ser ventajoso usarscrollIntoViewen el script que se está ejecutando, en lugar de finalizar el script, crear unaActionpara realizar el desplazamiento y finalizar la operación completa con otroexecuteScript.