ScrollIntoView vs moveToElement

В Selenium WebDriver существуют два основных метода для добавления элемента в видимую область:

Являются ли эти методы эквивалентными и какие из них предпочтительнее?

Ответы

Ответ 1

scrollIntoView

Метод DOM scrollIntoView только прокручивает элемент в представлении. Если scrollIntoView не может прокручивать элемент в представлении, он просто терпит неудачу. Я добавил невидимый элемент в начало body и назвал его scrollIntoView. Ничего не прокручивалось, но ошибки не было. Обратите внимание, что у вас больше контроля над тем, как элемент прокручивается с помощью scrollIntoView, чем с помощью moveToElement. Селен заинтересован только в том, чтобы представить элемент в поле зрения, чтобы мышь могла быть помещена на него. Это не дает вам никаких заявлений о том, как это будет сделано. scrollIntoView однако позволяет вам, например, указать, хотите ли вы, чтобы верх или низ элемента были выровнены с его прокручиваемым предком. (Подробнее см. здесь.

moveToElement

Метод Selenium moveToElement выполняет две функции: он прокручивает элемент в представлении и перемещает мышь поверх элемента. Я также тестировал его с элементами, которые нельзя прокручивать или перемещать, потому что они не имеют координат на экране и не имеют здесь никакой ошибки.

Выбор одного

По умолчанию я использую moveToElement со следующими исключениями:

  • Если вы не хотите вообще влиять на то, где Selenium поместил мышь, но вы хотите прокрутить что-то в поле зрения (немного странно... но возможно), тогда вы должны использовать scrollIntoView.

  • Если вам нужно прокрутить элемент с видом элемента управления, который scrollIntoView дает вам (например, параметр выравнивания, упомянутый выше), вы должны использовать его, а не moveToElement.

  • Бывают случаи, когда попытки имитировать поведение пользователя с помощью команд Selenium невозможно или очень дорого сделать, отправив серию команд Selenium. (Каждая команда - это кругооборот в сети. Когда сервер тестирования где-то через Интернет, он складывается.) В таких случаях я использую Selenium executeScript. В этом случае может быть полезно использовать scrollIntoView в script, а затем завершить script, создать Action для выполнения прокрутки и завершить всю операцию с помощью другого executeScript.