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

Фотография

Ошибка при первом выполнении тестов после обновления версии


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

#1 O'Leen

O'Leen

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

  • Members
  • Pip
  • 55 сообщений
  • Город:Киев

Отправлено 18 февраля 2013 - 18:46

При первом запуске тестов после обновления версии Webdriver не воспринимает некоторые (одни и те же) id и xpath - просто игнорирует их и не кликает.
При повторном запуске тест выполняется без ошибок, то есть проблема появляется только при первом запуске после обновления билда.

Пробовала после клика прописывать условие - если есть элемент с таким-то id, то кликнуть по нему, если нет - идти дальше. Не помагает.

Подскажите кто-нибудь, почему может возникать такая проблема.
Я новичок в освоении Selenium.
  • 0

#2 ashipovalov

ashipovalov

    Активный участник

  • Members
  • PipPip
  • 142 сообщений
  • ФИО:Шиповалов Александр


Отправлено 19 февраля 2013 - 06:58

Версия Selenium и версия браузера?
  • 0

#3 O'Leen

O'Leen

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

  • Members
  • Pip
  • 55 сообщений
  • Город:Киев

Отправлено 19 февраля 2013 - 12:56

Selenium 2.0
Браузер Firefox 18.0.2

Ошибка возникает когда поднимается pop-up, там нужно выбрать значение из выпадающего списков. Так вот при первом выборе значения из списка загрузка самого списка длится несколько секунд, но Webdriver не дожидаясь загрузки выбирает элемент списка и кликает на "Ок", срабатывает валидация и выполнение теста останавливается.
Я так понимаю мне тут нужно указать какое-то явное ожидание? Но элемент (в данном случае кнопка "Ок") изначально есть на странице, и дожидаться, пока он загрузится, не надо...
Подскажите, пожалуйста, как выйти из этой ситуации.
И было бы весьма актуально сам кусочек кода для этого посмотреть. Интересует для Java.
Сейчас это выглядит так:

driver.findElement(By.xpath(".//*[@id='general']/li[7]/div[1]/a/span")).click(); //кнопка для вызова попапа
driver.findElement(By.id("driversLiset")).click();
driver.findElement(By.id("driversLiset")).sendKeys(Keys.ARROW_DOWN);
driver.findElement(By.id("PartyVehicle_DriverInjury")).sendKeys("ушиб");
driver.findElement(By.id("postVehicleBtn")); //кнопка "ОК"


Буду благодарна за любой совет.
  • 0

#4 Snap

Snap

    Специалист

  • Members
  • PipPipPipPipPip
  • 980 сообщений
  • ФИО:Роман
  • Город:Москва


Отправлено 19 февраля 2013 - 13:18

А поточнее какая именно версия WebDriver?

И какая срабатывает валидация? По-хорошему дожидаться загрузки списка следует. Для теста можно просто задержку поставить и посмотреть изменится ли ситуация.
  • 0

#5 O'Leen

O'Leen

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

  • Members
  • Pip
  • 55 сообщений
  • Город:Киев

Отправлено 19 февраля 2013 - 14:20

А поточнее какая именно версия WebDriver?
И какая срабатывает валидация? По-хорошему дожидаться загрузки списка следует. Для теста можно просто задержку поставить и посмотреть изменится ли ситуация.


Стоит Eclipse Juno Service Release 1, в него копирую тесты из Selenium IDE в формате Java / JUnit4 / WebDriver, после того уже модифицирую их в Eclipse.

В pop-up просто нужно выполнить одно из 2 действий: либо заполнить поля вручную (одно поле - обязательное), либо выбрать из списка (в этом случае поля для ввода пропадают). Я выбирала из списка, но выходит, что "Ок" кликала раньше, чем пропадали поля, и на короткий миг поле (которое вроде как должно было к тому моменту исчезнуть) подсвечивалось как незаполненное.
Добавила задержку в 2сек., теперь проблема исчезла. Спасибо!

Но ставить просто задержку, имхо, не очень хороший выход.
Тем более, такая ситуация повторяется в разных местах.
  • 0

#6 Snap

Snap

    Специалист

  • Members
  • PipPipPipPipPip
  • 980 сообщений
  • ФИО:Роман
  • Город:Москва


Отправлено 19 февраля 2013 - 14:55

Не, я имел ввиду версию библиотеки WebDriver (2.28, 2.29...). Но как мы уже поняли дело не в ней.
На второй раз страница может закешироваться и поэтому работает быстрее, поэтому тест старабывал до этого.

Про задержку все верно - ищите как дождаться появления/исчезновения элемента в соседних темах.
  • 0

#7 appmen

appmen

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

  • Members
  • PipPipPipPip
  • 408 сообщений
  • ФИО:Victor

Отправлено 19 февраля 2013 - 15:01

можно написать что-то подобное:

WebDriverWait wait = new WebDriverWait(driver, 60);
wait.until(ExpectedConditions.presenceOfElementLocated(locator));

это ищет элемент по локатору в течении минуты с интервалом в 500 мсек (если не ошибаюсь)
  • 0

#8 O'Leen

O'Leen

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

  • Members
  • Pip
  • 55 сообщений
  • Город:Киев

Отправлено 19 февраля 2013 - 15:15

Спасибо!
А кто-нибудь может подсказать как это

WebDriverWait wait = new WebDriverWait(driver, 60);
wait.until(ExpectedConditions.presenceOfElementLocated(locator));

будет выглядеть на джаве?
  • 0

#9 appmen

appmen

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

  • Members
  • PipPipPipPip
  • 408 сообщений
  • ФИО:Victor

Отправлено 19 февраля 2013 - 15:29

это и есть Джава :victory:
забыл написать, просто
  • 0

#10 O'Leen

O'Leen

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

  • Members
  • Pip
  • 55 сообщений
  • Город:Киев

Отправлено 19 февраля 2013 - 15:55

это и есть Джава :victory:/>
забыл написать, просто


Правда?? А почему мне Eclipse подсвечивает почти все параметры как ошибки? Или какую вы используете среду и библиотеки?
Прошу прощения заранее за свои глупые вопросы :)
  • 0

#11 appmen

appmen

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

  • Members
  • PipPipPipPip
  • 408 сообщений
  • ФИО:Victor

Отправлено 19 февраля 2013 - 16:14

если навестись на эти ошибки, то эклипс подскажет способы их решения. Нужно добавить
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

  • 0


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

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