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
scrollIntoView
le 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
executeScript
deexecuteScript
deexecuteScript
. En tal caso, puede ser ventajoso usarscrollIntoView
en el script que se está ejecutando, en lugar de finalizar el script, crear unaAction
para realizar el desplazamiento y finalizar la operación completa con otroexecuteScript
.