javascriptexecutor executescript ejecutar con javascript java html selenium selenium-webdriver

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 :

  1. Desplazarse a la vista :

    ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);

  2. 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 de moveToElement .

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