首页 > 解决方案 > 如何修复“红宝石硒中的陈旧元素错误”

问题描述

尝试单击元素时,以下代码中出现过时元素错误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

标签: rubyseleniumwebdriverwatir

解决方案


这是您所采用的方法,而不是您正在使用的工具。

您正在查找元素列表,离开页面,然后尝试返回并使用先前找到的元素之一。

如果这确实是您需要采取的路线,并且您不关心表的结构在刷新时会发生变化,那么您可能只需收集所有内容的大小,并每次使用索引定位特定元素。

一般刷新时:#find_element --> good,#find_elements --> bad。


推荐阅读