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

Фотография

Выбор двух Селектов


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

#1 user12

user12

    Специалист

  • Members
  • PipPipPipPipPip
  • 894 сообщений
  • ФИО:Виктор
  • Город:Минск


Отправлено 30 сентября 2011 - 06:22

Пример

Есть 2 дропдаун меню которые располагаются друг под другом на странице:

В первом есть названия товаров (вино,хлеб).
Во втором есть названия подкатегорий(белое вино, красное вино, белый хлеб, черный хлеб)

Когда выбираешь название товара, например Хлеб, то во втором меню отображается только "Белый хлеб", "Черный хлеб"
Если выбираешь название товара "Вино", то во втором отображается только "Белое вино", "Красное вино"

Проблема в том, что Selenium проставляет все данные мгновенно, т.е. в Selenium IDE это выглядит так:

select "id=product" "index=1"
select "id=product_name" "index=2"

В элемент "id=product_name" не успевают подставиться данные и поэмоу кейс валится

Это можно обойти "говнокодом", т.е. в Selenium IDE вставить между селектами "pause 100" или в Java "Thread.sleep(100);"

Как обойти это без пауз ?
  • 0

#2 ch_ip

ch_ip

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

  • Members
  • PipPipPipPipPipPip
  • 1 097 сообщений
  • ФИО:Павел Абдюшев
  • Город:Москва


Отправлено 30 сентября 2011 - 06:37

А как реализована фильтрация во втором списке? Это просто JS или после выборки значения в первом списке идет AJAX-запрос к серверу?
Надо ли их действительно выбирать оба в автотесте или достаточно сразу выбрать во втором списке нужное значение? А первый создан для удобства использования?
В данном случае, кстати, применение паузы в 100-200 миллисекунд вполне оправдано, потому что позволяет вам написать достаточно устойчивый тест быстро. И то, что он ждет всегда 100 миллисекунд, а не, скажем, 90, которых хватило на выполнение фильтрации второго списка - это такие мелочи, которые никогда не окупят ваше время, потраченное на изыскания, как написать красивее.
Да и более красивый код, который проверяет, выполнился AJAX-запрос или нет, скорее всего будет работать медленнее, нежели sleep(100).
Так что советую просто оставить небольшую задержку и не заморачиваться.
  • 0

#3 Leoxa

Leoxa

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

  • Members
  • Pip
  • 59 сообщений
  • ФИО:Алексей

Отправлено 30 сентября 2011 - 08:48

В элемент "id=product_name" не успевают подставиться данные и поэмоу кейс валится

Это можно обойти "говнокодом", т.е. в Selenium IDE вставить между селектами "pause 100" или в Java "Thread.sleep(100);"

Как обойти это без пауз ?


можно обернуть выбор из второго меню в try-catch и засунуть его в цикл.
можно реализовать ожидание нужного элемента из второго списка.
но "говнокодные" паузы проще, согласен. и можно даже сказать, что в некотором смысле надежнее. :)
  • 0

#4 vitorg

vitorg

    Опытный участник

  • Members
  • PipPipPipPip
  • 408 сообщений

Отправлено 30 сентября 2011 - 11:20

Я всегда категорически против говнопауз, если у вас там Ajax, то вот нормальный универсальный способ: http://habrahabr.ru/...testing/111649/
Также можно просто вызвать waitForCondition("selenium.isElementPresent('locator.of.option')"), но немного придётся адаптировать локаторы. Второй вариант будет работать некорректно если в двух категориях есть одноимённые подкатегории.
  • 0


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

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