我在this other question中描述的优化代码时遇到了问题。我开始认为我只需要同时运行两个WebDriver实例。有没有办法复制/ fork /深度克隆Selenium WebDriver对象?我已经尝试过天真的编组和解组,但这并没有给出理想的结果。
一个成功的用例是制作一个当前位于网站的窗口的副本,并在该克隆的同时在同一网站上生成具有相同JavaScript和CSS的另一个窗口,而无需再次向服务器请求该页面,但只是在本地重新加载。之后,他们可能会发生分歧。
答案 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"]
这样您就可以进入任何所需的浏览器窗口,完成工作并关闭窗口。