1

正如我在另一个问题中所描述的那样,我在优化我的代码时遇到了问题。我开始认为我只需要同时运行我的 WebDriver 的两个实例。有没有办法复制/分叉/深度克隆 Selenium WebDriver 对象?我天真地尝试过 Marshalling 和 Unmarshalling,但这并没有给出预期的结果。

一个成功的用例是复制当前在网站上的一个窗口,并从克隆的那一刻起使用相同的 JavaScript 和 CSS 在同一网站上生成另一个窗口,而无需再次向服务器请求该页面,但只需在本地重新加载它。之后,他们可能会分道扬镳。

4

1 回答 1

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"]

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

于 2013-09-05T10:47:45.673 回答