目标:在irb中,在新标签页中打开一系列超链接并保存每个超链接的屏幕截图。
代码:
require "rubygems"
require "selenium-webdriver"
browser = Selenium::WebDriver.for:firefox
browser.get 'https://company.com'
browser.find_element(:name, "username").send_keys("myUsername")
browser.find_element(:name, "password").send_keys("myPassword")
browser.find_element(:name, "ibm-submit").click
body = browser.find_element(:tag_name => 'body')
body.send_keys(:control, 't')
parent = browser.find_element(:xpath, "//div[@id='someid']")
children = parent.find_elements(:xpath,"//a")
children.each do |i| ;
body.send_keys(:control, 't')
i.click
browser.save_screenshot("{i}")
end
问题:
Selenium::WebDriver::Error::StaleElementReferenceError: Element not found in the cache - perhaps the page has changed since it was looked up
问题:我做错了什么?
答案 0 :(得分:0)
基本上,您无法跨页面共享WebElement
,但您尝试跨多个标签访问body
。尽量不要将它们视为自包含的对象,而是将其视为真实页面上某些内容的代理。
解决方案是只对“当前”页面执行操作。在您的情况下,这意味着在您创建的选项卡上发送 Ctrl-T 事件。完成第一次后,您将切换到新选项卡。然后,您需要重新执行查找:
newTabsBody = browser.find_element(:tag_name => 'body')
然后:
newTabsBody.send_keys(:control, 't')
创建下一个。继续为每个孩子。