使用Watir查找当前打开的浏览器(firefox)窗口

时间:2013-08-28 19:08:39

标签: ruby window selenium-webdriver watir watir-webdriver

我正在尝试编写一个脚本,该脚本将查找并使用在执行脚本之前已经打开的浏览器窗口(可以是IE或Firefox)。 attach方法适用于IE,但不适用于Firefox。

browser = Watir::Browser.attach(:url, /url.com/)

使用Watir-Webdriver我尝试了在其他地方发布的窗口切换技巧,但只有当您从原始浏览器窗口中单击链接时,这似乎才有效。在脚本运行之前,似乎找不到已打开的窗口。

其他地方博客上的用户社区告诉我这只能用于IE并使用watir而不是watir-webdriver。 webdriver有an issue opened at the selenium问题跟踪器,但它已经开放了很长一段时间。

我希望那里有一个解决方法。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

Webdriver不支持附加到现有进程,因此也不能使用watir-webdriver

答案 1 :(得分:1)

我在寻找同一问题的解决方案时发现了这一点。

我想到的是使用Sinatra编写一个非常简单的Ruby Web服务,并让 将浏览器对象作为全局变量处理:

require 'rubygems'
require 'sinatra'
require 'watir-webdriver'

set :port, 9000

get '/openbrowser' do
    $browser = Watir::Browser.new :ff
    $timeout_length = 30    
    $browser.driver.manage.window.maximize
end

get '/closebrowser' do 
    $browser.close
end

然后让第二个脚本向Web服务发送HTTP请求,如下所示:

require 'net/http'
require 'uri'

url = "http://localhost:9000/openbrowser" 
uri = URI.parse(url)
Net::HTTP.get(uri)
sleep(5)

url = "http://localhost:9000/closebrowser" 
uri = URI.parse(url)
Net::HTTP.get(uri)

因此,通过这种方式,您可以打开浏览器,并将其与独立脚本一起使用,只要您愿意,并在完成后将其关闭。

坏消息是:如果你已经有了东西,可能需要做很多修改。

好消息是,如果你从头开始,你可以快速建立它。而且,如果您将浏览器对象存储在一个数组中,如果您遇到这种情况,可以并行测试多个浏览器。

希望这会有所帮助(尽管已经晚了3年)