Я использую Watir-webdriver 0.5.3. Раньше с версиями около 0.4.x это никогда не было проблемой:
while $browser.div(:class => /^expander$/).exists?
$browser.div(:class => /^expander$/).click; sleep 1.5
end
Щелчок вызывает выполнение некоторого javascript, который изменяет класс для щелкнутого div, расширяя элемент управления древовидной структуры. Цель скрипта — продолжать расширять узлы до тех пор, пока не останется ни одного нерасширенного.
Я часто получаю сообщение "Элемент больше не привязан к модели DOM" в строке .exists?, например. беспокоит, потому что причина, по которой я начал широко использовать .exists?
, заключалась в том, чтобы избежать таких ошибок, которые в первую очередь немедленно приводят к сбою сценария.
визуально я наблюдаю расширение почти сразу после .click, и если я приостанавливаю действия прямо здесь, Firebug подтверждает, что div только с class='expander' был заменен на div с class='expander hasChildren расширен», и только этот div.
Ошибка, похоже, исходит от веб-драйвера.
У кого-нибудь еще была эта проблема или порекомендуйте обходные пути?
В более раннем вопросе мне нужно было переключить в форму /^expander$/
, чтобы соответствовать исключительно этому классу, после изменения нового поведения watir-webdriver
.
.exists?
не видит новую версию DOM после того, как она была обновлена каким-то AJAX/Javascript, либо она вообще не работает с типами элементов и поиском по тегам, которые я часто использую. - person Marcos   schedule 24.02.2012$browser.driver.manage().timeouts().implicit_wait=10
или смехотворно долгое явное время ожидания, но все равно та же ошибка, только более длительное ожидание. Такая проблема преследует меня с тех пор, как я начал использовать ватир. Есть ли способ принудительно перечитать DOM, чтобы мой код мог двигаться дальше? (Или прервать обновление DOM браузера, а затем перечитать, хотя я думаю, что уже пробовалsend_keys ESC
раньше) - person Marcos   schedule 24.02.2012expander
был заменен на div вместо него с class=expander hasChildren expanded
, и только этот div. Даже если на нее снова нажмут по ошибке, она никогда не вернется кexpander
, аexpander hasChildren
- person Marcos   schedule 24.02.2012.click
, но, как ни странно, всегда на.exists?
в этом примере кода. - person Marcos   schedule 24.02.2012