#ruby #selenium #webdriver #watir
Вопрос:
Я получаю устаревшую ошибку элемента в следующем коде, когда он пытается щелкнуть элемент row.find_element(:xpath, "//*[@id='batch']/div[1]/table/tbody/tr[#{index}]//td[5]/form/input[3]").click()
def traverse_batch
driver.find_elements(:xpath, "//*[@id='batch']/div[1]/table/tbody/tr").each.with_index(1) do |row, index|
row.find_elements(:xpath, "//*[@id='batch']/div[1]/table/tbody/tr[#{index}]/td").each do |td|
sleep(5)
if td.text() == 'started'
while td.text() == /^success/ do
driver.navigate.refresh()
end
end
if row.find_element(:xpath, "//*[@id='batch']/div[1]/table/tbody/tr[#{index}]//td[5]/form/input[3]").displayed?
row.find_element(:xpath, "//*[@id='batch']/div[1]/table/tbody/tr[#{index}]//td[5]/form/input[3]").click()
end
end
end
end
Комментарии:
1. вы должны повторно найти элементы после изменения DOM , обновление страницы изменяет DOM
2. Спасибо PDHide. Но я новичок в кодировании. Я не знаю, куда добавить код для уточнения элемента в моем коде. Мне нужно обновить страницу, чтобы увидеть, отображается ли кнопка «возобновить».
3. Вот почему нужно использовать WATIR, WATIR-это оболочка вокруг привязки рубинового селена. В ВАТИРЕ вы бы не столкнулись с проблемой устаревшего элемента. WATIR автоматически восстановит элемент из DOM.
4. Спасибо тебе, Раджагопалан.
5. Вероятно, на странице есть какой-то код JS, который обновляет страницу после обновления, поэтому страница все еще находится в движении сразу после обновления. Вашему коду может потребоваться какой-то способ определить, что код JS завершил обновление DOM (или пауза грубой силы), чтобы он не пытался взаимодействовать, пока DOM все еще изменяется
Ответ №1:
Это подход, который вы используете больше, чем инструмент, который вы используете.
Вы находите список элементов, удаляетесь со страницы, а затем пытаетесь вернуться и использовать один из ранее найденных элементов.
Если это действительно тот маршрут, который вам нужно пройти, и вас не беспокоит изменение структуры таблицы при обновлении, вы можете просто собрать размеры всего и каждый раз находить конкретный элемент с индексами.
Вообще говоря, при обновлении: #find_element —> хорошо, #find_elements —>> плохо.