Ruby selenium gem:在多个选项卡中打开超链接

时间:2016-02-10 14:34:03

标签: ruby selenium

目标:在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

问题:我做错了什么?

1 个答案:

答案 0 :(得分:0)

基本上,您无法跨页面共享WebElement,但您尝试跨多个标签访问body。尽量不要将它们视为自包含的对象,而是将其视为真实页面上某些内容的代理。

解决方案是只对“当前”页面执行操作。在您的情况下,这意味着在您创建的选项卡上发送 Ctrl-T 事件。完成第一次后,您将切换到新选项卡。然后,您需要重新执行查找:

newTabsBody = browser.find_element(:tag_name => 'body')

然后:

newTabsBody.send_keys(:control, 't')

创建下一个。继续为每个孩子。

相关问题