Как Selenuim делает Click, часть 2

01.07.2017

Пока окно браузера было распахнуто на весь экран было все замечательно. Но что, если нам надо уменьшить это окно? На половину экрана, допустим. Или даже меньше. Ситуация, когда одновременно на экране присутствуют электронная таблица, куда заносятся цифры и браузер, из которого эти самые цифры берутся, не является чем-то необычным. Переключаться щелчком мыши (или вообще не переключаться, если все необходимое видно) гораздо удобнее, чем постоянно мучить Alt-Tab, или что там используется вместо него.

Стало быть, надо тестировать приложение на четверти экрана. И, внезапно, в уже отлаженных тестах посыпались исключения StaleElementReferenceException. Это исключение вызывается, когда мы находим нужный элемент, сохраняем его, а браузер перерисовывает страницу так, что конкретно этого элемента уже нет. Есть другой, в точности такой же на вид, но другой. И когда после этого мы пытаемся что-то сделать с сохраненным элементом, вызывается исключение.

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

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