我编写了一个Ruby脚本来使用IE实现一些用户操作的自动化。我正在为IE使用Selenium Web驱动程序。下面是我的密码。
require 'selenium-webdriver'
browser = Selenium::WebDriver.for :ie
first_window = browser.window_handle
browser.switch_to.frame(browser.find_element(:id=> 'outerFrame'))
browser.switch_to.frame(browser.find_element(:id=> 'innerFrame'))
table_rows = browser.find_element(:id=> 'AllItems').find_element(:tag_name=> 'table').find_elements(:tag_name=> 'tr')
count_cell = table_rows.at(table_rows.length-1).find_elements(:tag_name=> 'td').at(1).find_element(:tag_name=> 'a')
count_cell.click
sleep(5)
all_windows = browser.window_handles
new_window = browser.window_handles.last
browser.switch_to.window(new_window)
btn = browser.find_element(:id=> 'btn_export')
btn.click单击按钮后,有一段时间会打开一个新页面。现在,当我尝试切换到新窗口时,我会得到以下错误。
C:/ruby 21/lib/ruby/2.1.0/net/http.rb:879:in 'initialize':无法建立连接,因为目标机器主动拒绝它。-为"127.0.0.1“端口5555 (Errno::ECONNREFUSED)连接C:/ruby 21/lib/ruby/2.1.0/net/http.rb:879: in 'open‘from C:/ruby 21/lib/ruby/2.1.0/http.rb:879:in 'block in connect’:/ruby 21/lib/ruby/2.1.0/timeout.rb:75:in‘in’in connect:/ruby 21/lib/ruby/2.1.0/timeout.rb:75:in‘in connect’C:/ruby 21/lib/ruby/2.1.0/net/http.rb:878:C:/ruby 21/lib/ruby/2.1.0/net/http.rb:863:在C:/ruby 21/lib/ruby/2.1.0/net/http.rb:852:in 'start‘from C:/ruby 21/lib/ruby/2。1.0/net/http.rb:1375:从C:/Ruby21/lib/ruby/gems/2.1.0/gems/selenium-webdriver-2.48.1/lib/selenium/webdriver/remote/http/default.rb:107:in 'response_for‘到C:/Ruby21/lib/ruby/gems/2.1.0/gems/selenium-webdriver-2.48.1/lib/selenium/webdriver/remote/http/default.的’请求‘rb:58:在来自C:/Ruby21/lib/ruby/gems/2.1.0/gems/selenium-webdriver-2.48.1/lib/selenium/webdriver/remote/http/common.rb:59:in的“请求”中,来自C:/Ruby21/lib/ruby/gems/2.1.0/gems/selenium-webdriver-2.48.1/lib/selenium/webdriver/remote/bridge.rb:664:in 'raw_execute的“调用”中‘从C:/Ruby21/lib/ruby/gems/2.1.0/gems/selenium-webdriver-2.48.1/lib/selenium/webdriver/remote/bridge.rb:642:in 'execute’从C:/Ruby21/lib/ruby/gems/2.1.0/gems/selenium-webdriver-2.48.1/lib/selenium/webdriver/remote/bridge.rb:216:in 'switchToWindow‘从C:/Ruby21 21/lib/ruby/gems/2.1.0/gems/selenium-webdriver-2.48.1/lib/selenium/webdriver/common/target_locator.rb:81:in‘窗口’来自script.rb:18:in '‘
我尝试通过修改防火墙和为端口5555添加规则来解决错误。即便如此,问题依然存在。我在这方面已经发现了一些令人兴奋的问题,但大多数问题都与Java或.Net有关。如何解决此错误?谁能给我指明正确的方向?
发布于 2015-12-10 10:22:07
我不是红宝石专家,但我也看到过类似的问题。我有一个Python-ic解决方案。您所需要做的就是对代码进行Ruby-fy。https://gist.github.com/ab9-er/08c3ce7d2d5cdfa94bc7
def change_window(browser):
"""
Simple window switcher without the need of playing with ids.
@param browser: Current browser instance
"""
curr = browser.current_window_handle
all_handles = browser.window_handles
for handle in list(set([curr]) - set(all_handles)):
return browser.switch_to_window(handle)发布于 2015-12-24 20:37:18
在切换到新窗口之前,尝试切换回顶级浏览上下文。
browser.switch_to.default_content
current_window = browser.window_handle
new_window = browser.window_handles.find { |win| win != current_window }
browser.switch_to.window(new_window)它应该隐式地这样做,所以如果不是,它很可能是一个bug。如果这是可行的,请让我知道,以便我可以看看我们是否需要提交一个错误报告。
https://stackoverflow.com/questions/34082836
复制相似问题