Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Как обновлять страницу на протяжении N-секунд? Как проверять изменился ли текст на странице по сравнению с предидущим?


#1

Ребята, подтолкните пожалуйста ато что-то застрял.
Есть html page очень простая, выглядит вот так(я уже по ходу теста на ней):

2 links:

        http://testsite.com/
        http://testsite.com/?_%26%239762%3B_=_%26%239762%3B_2

И дальше нужно ее переодически обновлять( раз в 5 сек на протяжении минуты) и если на ней что-то поменялось(первая строчка допустим стала 4 links) то тест проходит, если на протяжении минуты ничего не поменялось - то фейлим тест


(rmerkushin) #2

На что должно поменяться значение вы заранее знаете?


#3

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


(Nik Sidorenko) #4

Предлагаю следующий алгоритм:

  1. Открываете страницу
  2. Сохраняете html страницы в файл либо переменную. Например, currentHtml
  3. Создаёте wait = new WebDriverWait(driver, 60, 5000), где 60 максимальное время ожидания в секундах, а 5000 периодичность проверки в миллисекундах
  4. Ждете wait.until ( new Predicate(){
    @Override
    public boolean apply(WebDriver driver){
    // Повторно считываете html в другую переменную. //Например, newHtml и сравниваете
    return currentHtml != newHtml;
    }
    });

Если за указанное время html страницы не поменялся, то тест завалится с timeOutException

P.S. в коде могут быть синтаксические ошибки. Пишу с мобильного нет возможности перепроверить.


(rmerkushin) #5

Очень странный тест, но раз нужно, воспользуйтесь циклом for в роботе, за количество итерации возьмите время максимального ожидания до фейла разделённого на примерное время которое уходит на загрузку страницы и проверку. В цикле сравнивайте заранее сохранённое значение перед циклом со значением полученным в цикле. Если совпадает выходите из цикла и измеряйте флаг проверки на true (по умолчанию он выставлен в false). А после цикла уже проверяйте флаг на тру. Если не тру фейлите тест. Все довольно просто. Как фейлить тест и делать циклы описано в документации к роботу

P.S.: если не хочется писать такую лапшу на роботе, всегда можно написать это на Python в виде библиотеки


#6

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

Застрял вот в чем: Загружаю страницу - на ней много елементов - меня интересуют номера страниц, которые при каждой перезагрузке будут увеличиваться.
Я подумал что было бы хорошо использовать Get Matching Xpath Count который посчитал бы сколько сейчас на странице кнопок, после перезагрузки страницы посчитал бы еще раз.
Но не могу написать правильный икспасс - тест зависает в этом месте на долго и фейлится.

Могли бы вы помочь написать правильный икспасс который подошел бы ко всем номерам страниц?


(Nik Sidorenko) #7

Не совсем понял, что должен найти xpath? Уточните. Конкретный номер страницы или все номера? Как в тесте будет использоваться то, что он найдет? И не плохо бы для экспериментов приатачить к теме html код страницы с номерами


#8

Спасибо за помощь. Подобрал локатор, вопрос снят