2016-05-13 1 views
0

Я делаю некоторые автоматизации с помощью RSpec и Watir-WebDriver - в настоящее время у меня есть два метода, которые используют общий фрагмент код, как этогоWatir #when_present вопрос несовместимого таймаута

# The snippet shown is meant to find a specific div, and when an element within it is present, then perform the click action 
search_modal = @browser.div(:class, 'asset-search') 
search_modal.when_present do 
    search_modal.div(:class, 'quick-search').click 
end 

Я побежал его для одного метода, и он работал правильно, без ошибок. Я запустил его по второму методу, и он истечет через 30 секунд. Ускорьте вперед до сегодняшнего утра, и этот второй метод теперь работает правильно.
Опять же, это тот же код, который используется в двух разных методах. Есть ли некоторые проблемы с использованием методов #wait? Если они известны как хрупкие или тонкие, есть ли лучший способ кодировать это?

Thanks

+0

Вы уверены, что проблема связана с методами ожидания? Когда время ожидания истечет, вы видите элемент, который вы ожидали? Две вещи, которые вы хотите проверить: (1) обычно занимает около 30 секунд, чтобы элемент отображался, поскольку это означает, что иногда оно заканчивается или находится под лимитом времени, и (2) является действием для запуска 'search_modal' всегда работающего ? В качестве примера последнего у меня были некоторые средства управления автозаполнениями, когда установка текстового поля имела непоследовательные результаты для открытия списка автозаполнения - то есть проблема заключалась в том, что он запускал модальный, а не ожидал модального. –

+0

@ JustinKo, я бы сказал, что это немного и то, и другое. На экране, когда я смотрю его, он идет в нужное место, но через тридцать секунд терминал истекает через 30 секунд, говоря, что не может найти нужный элемент - что путает, когда он действительно туда попадает! – kmancusi

ответ

0

Я подозреваю, что часть вашей проблемы может заключаться в том, что вы создаете переменную, которая в основном будет статичной после создания. поэтому он будет либо объектом div, который затем передает текущий тест, либо нулевым объектом, который будет тайм-аут, прежде чем он станет присутствующим. (если я не смущен)

Попробуйте это и посмотрите, не работает ли оно лучше.

@browser.div(:class, 'asset-search').div(:class, 'quick-search').when_present.click 

Если это дает ошибку вам, возможно, придется сделать это в два этапа

@browser.div(:class, 'asset-search').wait_until_present 
@browser.div(:class, 'asset-search').div(:class, 'quick-search').when_present.click 

В качестве альтернативы, если есть только один экземпляр DIV с классом быстрого поиска (так что вы не будет необходимо сжать браузер, чтобы найти его внутри div-объекта), тогда вы могли бы сделать

@browser.div(:class, 'quick-search').when_present.click 
Смежные вопросы