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

Фотография

Быстро кликаю на много ссылок


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

#1 degradator

degradator

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

  • Members
  • Pip
  • 59 сообщений
  • ФИО:смиромсерг

Отправлено 07 июня 2012 - 09:14

Здравствуйте!
Помогите справится с такой бедой - есть игра, в ней карта (квадратные клетки), которую надо прокликать - если точка - просто точка, то ничего не делаем, если точка - деревня, надо взять оттуда количество населения. Для этого нужно кликнуть по этой деревне, тогда открывается окошко с данными о деревне. Вот вобщем все это я реализовал.

Но тут вылез подводный камень с которым я раньше не сталкивался. Называется
Random “Element is no longer attached to the DOM” StaleElementReferenceException
Попробовал тупо ждать -
MainWindow.driver.manage().timeouts().implicitlyWait(300, TimeUnit.MILISECONDS);
Не помогло, потом увеличил задержку -
MainWindow.driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
и все заработало, но это наверно неприемлемо - у меня скорость модема 1 мбит/с, а если у пользователя будет например 15 кбит/с, то надо будет еще задержку увеличивать.
Можно конечно просто обернуть в обработчик исключений, и одну-две деревни просто не учесть, все равно там никто не разберется, но это совсем плохое решение.

Можно ли это как-то более грамотно реализовать?
  • 0
Мой сайт - Травиан бот :)

#2 Alex

Alex

    Постоянный участник

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

Отправлено 08 июня 2012 - 08:37

Здравствуйте!
Помогите справится с такой бедой - есть игра, в ней карта (квадратные клетки), которую надо прокликать - если точка - просто точка, то ничего не делаем, если точка - деревня, надо взять оттуда количество населения. Для этого нужно кликнуть по этой деревне, тогда открывается окошко с данными о деревне. Вот вобщем все это я реализовал.

Но тут вылез подводный камень с которым я раньше не сталкивался. Называется

Random “Element is no longer attached to the DOM” StaleElementReferenceException
Попробовал тупо ждать -
MainWindow.driver.manage().timeouts().implicitlyWait(300, TimeUnit.MILISECONDS);
Не помогло, потом увеличил задержку -
MainWindow.driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
и все заработало, но это наверно неприемлемо - у меня скорость модема 1 мбит/с, а если у пользователя будет например 15 кбит/с, то надо будет еще задержку увеличивать.
Можно конечно просто обернуть в обработчик исключений, и одну-две деревни просто не учесть, все равно там никто не разберется, но это совсем плохое решение.

Можно ли это как-то более грамотно реализовать?


Ставьте хоть 200 секунд. Не вижу проблемы. Этот таймаут все равно сработает только в случае ошибки (отсутствия элемента), т.е. на скорость прохождения теста он никак не влияет, а сказывается только на скорости получения ошибки.

Или вынести в настройки таймаут. Пусть пользователь сам решает, какой таймаут ему выставить.

Также можно попробовать, например, запрашивать url какой-нибудь страницы и на основании времени ответа масштабировать таймаут:

Время ответа | Таймаут
<100 мс | 300 мс
<1c | 3 с
И т.д.
  • 0


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

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