如何复制/ fork /深度克隆Selenium WebDriver对象实例

时间:2013-09-05 07:57:15

标签: ruby selenium-webdriver

我在this other question中描述的优化代码时遇到了问题。我开始认为我只需要同时运行两个WebDriver实例。有没有办法复制/ fork /深度克隆Selenium WebDriver对象?我已经尝试过天真的编组和解组,但这并没有给出理想的结果。

一个成功的用例是制作一个当前位于网站的窗口的副本,并在该克隆的同时在同一网站上生成具有相同JavaScript和CSS的另一个窗口,而无需再次向服务器请求该页面,但只是在本地重新加载。之后,他们可能会发生分歧。

1 个答案:

答案 0 :(得分:0)

是的只是为了证明这一点,我写了下面的代码: -

require 'selenium-webdriver'

driver = Selenium::WebDriver.for :firefox
driver.navigate.to "http://en.wikipedia.org/wiki/Cascading_Style_Sheets"

link_arr = driver.find_elements(:xpath,"//a")[2..4]
link_arr.map!{|e| e.attribute("href")}

link_arr.each do |link|
     driver.execute_script("window.open(\"#{link}\")") if link
end

p driver.window_handles.size # => 4
# the below will give you the title of each opened window
p driver.window_handles.map{|d| driver.switch_to.window(d);driver.title}
# => ["Cascading Style Sheets - Wikipedia, the free encyclopedia", 
#"Wiki Loves Monuments India | The Wikipedia photo contest around Cultural Heritage", 
#"Wiki Loves Monuments India | The Wikipedia photo contest around Cultural Heritage", 
#"Cascading Style Sheets - Wikipedia, the free encyclopedia"]

这样您就可以进入任何所需的浏览器窗口,完成工作并关闭窗口。