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

Подождать обновления товаров в Яндекс.Маркет


(Артём Кузьменко) #1

Здравствуйте.
Имеем тест:

  1. Открыть браузер и развернуть на весь экран.
  2. Зайти на yandex.ru.
  3. Перейти в яндекс маркет
  4. Выбрать раздел Электроника
  5. Выбрать раздел Наушники
  6. Зайти в расширенный поиск
  7. Задать параметр поиска от 5000 рублей.
  8. Выбрать производителя Beats
  9. Нажать кнопку Применить.
  10. Проверить, что элементов на странице 10.
  11. Запомнить первый элемент в списке.
  12. В поисковую строку ввести запомненное значение.
  13. Найти и проверить, что наименование товара соответствует запомненному значению.

Как вставить ожидание обновления товаров после шага 9. А то тест запоминает название товара до обновления списка товаров. Я обхожу данную ситуацию через sleep.
Можно это сделать как-то через ожидания?

Страница yandex: https://market.yandex.ru/catalog/56179/list?hid=90555&how=dpop&gfilter=1801946%3A8455647&in-stock=1&pricefrom=5000
Скрин:


(Ray Romanov) #2

В Codecption я бы так написал:

$I->waitForElementVisible('/html/body/div[1]/div[4]/div[2]/div[1]/div[2]/div[1]/div[1]', 10);

Путь к блоку найденного товара…


(Bolatbek) #3

Может попробуете дождаться окончания аякс запросов: “$.active” равным 0?


(Bolatbek) #4


(Артём Кузьменко) #5

Такой вариант не подходит. Блок доступен сразу, даже после нажатия на кнопку “Применить” в фильтре, а только через доли секунды скрывается…

Получается надо сначала подождать обновления, а только потом смотреть в 1 карточку, а без sleep, смотрит моментально первую карточку до обновления


(Sergey QA) #6

Создаешь такой метод-обертку:

public void waitUntilElementNotPresented(By locator){
        new WebDriverWait(getDriver(), 60).until(ExpectedConditions.invisibilityOfElementLocated(locator));
    }

И юзаешь его, чтобы дождаться исчезновения спиннера загрузки.

waitUntilElementNotPresented(spinnerLocator);