Как найти текст с помощью капибары, когда текст скрыт? - PullRequest
0 голосов
/ 03 мая 2019

Я только начинаю автоматизированное тестирование, и я экспериментировал с различными тестами для разных браузеров.Я пытаюсь найти конкретный текст на странице (почтовый индекс, который ранее был прочитан из другого поля), код, который я использовал, прекрасно работал для Chrome, однако для Firefox время ожидания истекло.Однако я использовал page.all (), потому что он просматривает всю страницу, это занимает какое-то время, поэтому время ожидания истекло.

Я пытался использовать find_all (), но это в основном то же самоеи та же ошибка снова появилась.Я также пытался использовать функцию sleep () после page.all (), но это ничего не дало, так как сначала запускается page.all (), и время ожидания истекло.

Есть ли другой способ, которым я могунайти почтовый индекс на странице?

В качестве примечания: если кто-то знает, как можно прокрутить страницу вниз, это сработало бы с тех пор, как текст не будет скрыт, и базовая функция find () сделает это.работа.

1 Ответ

0 голосов
/ 03 мая 2019

Ваш вопрос имеет ряд неточностей, поэтому давайте сначала исправим их.

  1. page.all, page.find_all и find_all - это одно и то же, поэтому пробовать одно над другим не имеет смысла и не будет иметь никакого значения.

  2. Если проблема заключалась в медленной загрузке страницы, и вы собирались использовать режим сна, вам нужно поставить ее перед page.all, чтобы увидеть разницу - дождитесь загрузки страницы и затем выполните поиск элемент.

  3. Ваш код не истекает, потому что all занимает некоторое время. Время, необходимое для выполнения all, минимально по сравнению со значением по умолчанию для Capybara.default_max_wait_time, и поиск фактически будет выполняться несколько раз, ожидая появления соответствующих элементов. Это может быть вызвано тайм-аутом, потому что браузер медленно загружает страницу, но это никак не связано со скоростью all

  4. Прокрутка страницы будет иметь значение, только если страница загружается с отложенным доступом. Текст не скрыт от Капибары, потому что он находится ниже сгиба, он скрыт, только если он не отображается на странице. Это было бы, если бы у него был CSS, из-за которого он вообще не отображался.

Хорошо, теперь перейдем к потенциальным решениям.

  • Вы не показываете свой код или точное сообщение об ошибке (хорошая практика в будущем, когда задаете вопрос о SO), поэтому я не знаю точно, что вы используете, но если на самом деле вы получаете ошибку Timeout при использовании all (и вы не указали ни один из параметров подсчета), тогда более вероятно, что используемая вами версия geckodriver не совместима с вашей версией Firefox. Это потому, что all вернет пустой массив, если он ничего не найдет, а не ошибка тайм-аута.

  • Если вместо этого вы просто имеете в виду all, не находит элементы и возвращает пустой массив, то это может быть просто Firefox по какой-то причине медленно загружает эту конкретную страницу, и вы можете увеличить максимальное время ожидания с что-то вроде Capybara.default_max_wait_time = 10

  • Если страница на самом деле загружается из-за ленивости, поэтому содержимого на самом деле не существует, пока вы не прокрутите страницу до конца, тогда вы можете прокрутить страницу вниз с помощью

    page.scroll_to: bottom

, что должно затем вызвать отложенную загрузку, хотя в этом случае я бы ожидал, что Chrome тоже потерпит неудачу (если только вы не тестируете окна с разными размерами, поэтому прокрутка не требовалась в Chrome, но была в Firefox)

...