Перейти к содержимому

Фотография

У Selenium нет функции которая может определить окончание отображения

selenium wait

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 15

#1 Spock

Spock

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 772 сообщений
  • ФИО:Роман

Отправлено 16 марта 2017 - 09:26

"определение когда страница закончила отображаться" - это залог стабильности тестов Селениум. Если в каких-то случаях не сможешь определить когда страница отобразилась (даже ожиданием элементов), тогда придётся использовать фиксированные ожидания, типа "ждать 3 секунды" - в результате тесты сразу станут медленными и хрупкими

 

некоторые примеры когда Селениум не в состоянии определить статус отображения страницы:

 

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

2. допустим есть кнопка и "цветовой индикатор". при нажатии кнопки индикатор меняет цвет на красный. В случае если цвет индикатора изначально красный и мы нажимаем на кнопку - тогда Селениум не понимает отработал ли скрипт кнопки, ведь цвет индикатора не меняется

3. добавление элемента в фильтрованную таблицу, когда новый элемент оказывается "под фильтрами" либо "на другой странице", то есть видимые элементы таблицы не меняются. Вводишь данные, нажимаешь на "добавить" - но Селениум не понимает добавлен ли элемент, так как новый элемент не добавлен в видимые элементы таблицы

 

Что есть у Селениума? Простой wait, который ожидает загрузку страницы. Но совершенно не гарантирует отображение данных

Далее есть все эти FluentWait, типа "подождать отображения элемента" - это реально хаки, и работают только в тех случаях, когда на странице в результате действия происходят изменения (если изменений нет, то метод не работает)

Раньше были методы основанные на определении когда jquery закончит работу на странице, думаю они могли гарантировать отображение - но теперь и этот метод не подходит, так как уже jquery мало где используется

 

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


  • 1

#2 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 16 марта 2017 - 10:44

У селениума нет такой функции, потому что он автоматически ждёт окончания загрузки страницы.

Проблема в том, что ваше представление о том, когда страница загрузилась, не совпадает с представлением селениума.

Он считает, что страница уже загрузилась, а вам кажется, что ещё нет.

 

Подробности тут:

Что инструменты автоматизации считают "окончанием загрузки страницы": http://barancev.gith...ading-complete/

Как в Selenium реализовано это ожидание: http://barancev.gith...r-page-to-load/

 

И конечно вот это тоже обязательно нужно иметь в виду:

https://en.wikipedia...Halting_problem


  • 1
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#3 Prettser

Prettser

    Новый участник

  • Members
  • Pip
  • 53 сообщений


Отправлено 16 марта 2017 - 12:00

Тема ожиданий - сложная штука. Тут начинаешь подстраиваться под конкретное приложение. SE не знает как устроено очередное приложение. Тут только своими силами при поддержке разработчиков. Печальная тема, съедает много времени


  • 1

#4 Spock

Spock

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 772 сообщений
  • ФИО:Роман

Отправлено 16 марта 2017 - 12:32

проверю как на нашей аппликации работает решение с document.readyState


  • 0

#5 Spock

Spock

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 772 сообщений
  • ФИО:Роман

Отправлено 16 марта 2017 - 15:47

 

У селениума нет такой функции, потому что он автоматически ждёт окончания загрузки страницы.

Проблема в том, что ваше представление о том, когда страница загрузилась, не совпадает с представлением селениума.

Он считает, что страница уже загрузилась, а вам кажется, что ещё нет.

так что получается в сумме:

 

- нам нужно: знать когда страничка отобразилась и готова к дальнейшим действиям

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

 

Получается Селениум не может дать основную фичу, которая именно и требуется для стабильных и быстрых тестов? То есть не может дать нам событие "страница полностью отобразилась", на котором бы мы могли строить стабильные и быстрые тесты?


  • 0

#6 Korgan

Korgan

    Новый участник

  • Members
  • Pip
  • 6 сообщений
  • ФИО:Игорь
  • Город:Санкт-Петербург

Отправлено 16 марта 2017 - 16:13

А какую проблему решаем? Зачем универсальное ожидание, что загрузилось всё(даже то, что может в конкретном тесте не проверяться)?
Как селениум должен, например, реагировать на не загруженные внешние ресурсы(картинки, iframe и т.д.), если Ваше приложение считает, что document.readyState = complete?

Почему ждать, пока все необходимые элементы не будут видимы не подходит?

Использовать фреймворки для тестирования, а не чистый селениум (который не про тестирование), где эти все ожидания уже встроены, почему не устраивает?


  • 0

#7 Prettser

Prettser

    Новый участник

  • Members
  • Pip
  • 53 сообщений


Отправлено 17 марта 2017 - 05:15

Тогда надо например selenide использовать. Можно будет с чистой совестью возмущаться, т.к. фреймворк позиционируется как для тестирования. И там много что сделано по ожиданиям. А чистый SE это инструментарий для управления браузером, который многие используют для тестирования.


  • 0

#8 Spock

Spock

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 772 сообщений
  • ФИО:Роман

Отправлено 17 марта 2017 - 09:54

 

 

Почему ждать, пока все необходимые элементы не будут видимы не подходит?

примеры 1, 2 и 3 выше читали, где не подходит? элементы могут вообще не меняться - тогда и метод "подождать изменения элементов" не подходит

 

 

 

Использовать фреймворки для тестирования, а не чистый селениум (который не про тестирование), где эти все ожидания уже встроены, почему не устраивает?

что имеется ввиду под "все ожидания"? может быть "все ожидания кроме самого нужного - то есть ожидания отображения страницы?"

 

 

 

Тогда надо например selenide использовать. Можно будет с чистой совестью возмущаться, т.к. фреймворк позиционируется как для тестирования. И там много что сделано по ожиданиям. 

"много что сделано по ожиданиям" - а я смотрю там только "красивые обёртки ожиданий", то есть те же самые ожидания селениума, но просто вызываются более высокоуровневым кодом. типа если надо проверить текст в элементе - то не надо как в Селениуме ждать появления элемента и потом проверять текст, в Селениде можно "просто проверить текст", так как ожидание уже встроено в проверку текста


  • 0

#9 Korgan

Korgan

    Новый участник

  • Members
  • Pip
  • 6 сообщений
  • ФИО:Игорь
  • Город:Санкт-Петербург

Отправлено 17 марта 2017 - 11:27

 

 

 

Почему ждать, пока все необходимые элементы не будут видимы не подходит?

примеры 1, 2 и 3 выше читали, где не подходит? элементы могут вообще не меняться - тогда и метод "подождать изменения элементов" не подходит

 

 

 

Использовать фреймворки для тестирования, а не чистый селениум (который не про тестирование), где эти все ожидания уже встроены, почему не устраивает?

что имеется ввиду под "все ожидания"? может быть "все ожидания кроме самого нужного - то есть ожидания отображения страницы?"

1) Расскажите подробнее какую проблему решаете? Пока не понятно зачем вам такое сферическое универсальное ожидание (что всё загрузилось) - побольше бы деталей. 

2) Подождать пока на проверяемой странице не появятся нужные значения, чем не устраивает?

3) Кстати с позиции UX это не дружелюбно: не понятно старые данные или уже новые - нужен какой-то Load Bar, который извещает, что новые данные загружены (и после этого вы можете их просто вытягивать и даже не сверять не с чем, но всё равно пока не понятно зачем это нужно)


  • 0

#10 Spock

Spock

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 772 сообщений
  • ФИО:Роман

Отправлено 17 марта 2017 - 11:50

 

 

1) Расскажите подробнее какую проблему решаете? Пока не понятно зачем вам такое сферическое универсальное ожидание (что всё загрузилось) - побольше бы деталей. 

уже ведь написал выше, один из примеров "ожидание загрузки пустой таблицы, у которой нет состояния _пустая таблица_"

 

 

 

2) Подождать пока на проверяемой странице не появятся нужные значения, чем не устраивает?

если данных нет, либо непонятно будут ли данные вообще, либо данные те же самые и не поменялись. Вот тогда метод "подождём нужные значения" не подходит

 

 

 

3) Кстати с позиции UX это не дружелюбно: не понятно старые данные или уже новые - нужен какой-то Load Bar, который извещает, что новые данные загружены (и после этого вы можете их просто вытягивать и даже не сверять не с чем, но всё равно пока не понятно зачем это нужно)

согласен, это недружелюбно. Надо либо лоад-бар делать, либо "пустое состояние таблицы" - чтобы по исчезновению лоад-бара либо по "появлению пустого состояние" можно было бы определить что страница отображена полностью

 

проблема в том, что эта "дружелюбность" в аппликации просто так не появится, в неё надо вкладывать ресурсы - программировать и тестировать. Ну и конечно старые "легаси" экраны которые никто и не будет даже трогать, обычно все надеются на появление новых, а старые на выброс


  • 0

#11 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 17 марта 2017 - 15:31

А какой технический способ Вы могли бы предложить для ожидания "пустой таблицы"? По каким признакам инструмент мог бы догадаться, что ждать больше не нужно, что таблица так и останется пустой?


  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#12 Spock

Spock

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 772 сообщений
  • ФИО:Роман

Отправлено 17 марта 2017 - 16:49

видимо это проблема не только Селениума, но и других тулзов для веб-тестирования

 

 

 

А какой технический способ Вы могли бы предложить для ожидания "пустой таблицы"? По каким признакам инструмент мог бы догадаться, что ждать больше не нужно, что таблица так и останется пустой?

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

 

есть конечно вариант добавить Селениуму прокси, и перехватывать ответ содержащий элементы таблицы, и соответственно этому говорить Селениуму надо ли ждать только загрузку страницы в случае пустой таблицы, либо ждать и загрузку данных тоже

 

конечно для упрощения тестирования и для обеспечения "тестабельности" в таблицу может быть добавлено состояние "пустая таблица". Индикатор загрузки тоже мог бы помочь, но "состояние пустая таблица" конечно удобнее


  • 0

#13 Prettser

Prettser

    Новый участник

  • Members
  • Pip
  • 53 сообщений


Отправлено 18 марта 2017 - 04:27

 в Селениде можно "просто проверить текст", так как ожидание уже встроено в проверку текста

 

Я об этом и писал :)
Чтоб самому не писать всех ожиданий


  • 0

#14 Prettser

Prettser

    Новый участник

  • Members
  • Pip
  • 53 сообщений


Отправлено 18 марта 2017 - 04:30

 

 

если данных нет, либо непонятно будут ли данные вообще, либо данные те же самые и не поменялись.

Хорошо, а как сам пользователь должен понимать, что "загрузилось уже все, что может загрузиться"? Если нет никаких индикаций и нет точного времени сколько пользователь должен ожидать, тогда еще более непонятно чего можно требовать программы.

 

 

 

видимо это проблема не только Селениума, но и других тулзов для веб-тестирования

Вот мне кажется, что это как раз проблема даже любого человека. Также как и SE,  человек-пользователь не догадается, что таблица так и останется пустой.


  • 0

#15 Spock

Spock

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 772 сообщений
  • ФИО:Роман

Отправлено 18 марта 2017 - 16:25

 

 

Если нет никаких индикаций и нет точного времени сколько пользователь должен ожидать, тогда еще более непонятно чего можно требовать программы.

программа ведь имеет доступ к программному интерфейсу - вот оттуда теоретически и надо было бы "узнать о текущем состоянии страницы". Зачем программе "опускаться до уровня человека" и смотреть только на пользовательский интерфейс?


  • 0

#16 Prettser

Prettser

    Новый участник

  • Members
  • Pip
  • 53 сообщений


Отправлено 19 марта 2017 - 05:33

 

 

 

Если нет никаких индикаций и нет точного времени сколько пользователь должен ожидать, тогда еще более непонятно чего можно требовать программы.

программа ведь имеет доступ к программному интерфейсу - вот оттуда теоретически и надо было бы "узнать о текущем состоянии страницы". Зачем программе "опускаться до уровня человека" и смотреть только на пользовательский интерфейс?

 

Затем, что это функциональное тестирование именно пользовательского интерфейса. Программа максимально должна подражать пользователю. Нажимать только ту кнопку, которая видна и нажимается, проверять видимость такого текста, который может увидеть пользователь, заполнять поля посимвольно и вставками, ждать столько же, сколько ждет пользователь.
Если задача иная, то тут либо юнит тесты с покрытием кода разработчика, либо нагрузочные тесты с другими инструментами, либо что-то еще, что обычный пользователь делать не будет. А функциональное тестирование GUI - это и есть опуститься до уровня пользователя. Такое мнение имею


  • 0



Темы с аналогичным тегами selenium, wait

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных