我编写了一个Ruby脚本来使用IE自动执行某些用户操作。 我正在使用Selenium Web Driver for IE。以下是我的代码。
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:/Ruby21/lib/ruby/2.1.0/net/http.rb:879:in' initialize':No 可以建立连接,因为目标机器主动拒绝 它。 - connect(2)for" 127.0.0.1" 5555港口(Errno :: ECONNREFUSED) 来自C:/Ruby21/lib/ruby/2.1.0/net/http.rb:879:在'打开' 来自C:/Ruby21/lib/ruby/2.1.0/net/http.rb:879:在'阻止连接' 来自C:/Ruby21/lib/ruby/2.1.0/timeout.rb:75:in&& 39; timeout' 来自C:/Ruby21/lib/ruby/2.1.0/net/http.rb:878:在' connect' 来自C:/Ruby21/lib/ruby/2.1.0/net/http.rb:863:in' do_start' 来自C:/Ruby21/lib/ruby/2.1.0/net/http.rb:852:in' start' 来自C:/Ruby21/lib/ruby/2.1.0/net/http.rb:1375:in' request' 来自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&#39 ; 来自C:/Ruby21/lib/ruby/gems/2.1.0/gems/selenium-webdriver-2.48.1/lib/selenium/webdriver/remote/http/default.rb:58:in '请求' 来自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 '执行' 来自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/lib/ruby/gems/2.1.0/gems/selenium-webdriver-2.48.1/lib/selenium/webdriver/common/target_locator.rb:81:in '窗口' 来自script.rb:18:在''
我尝试通过修改防火墙并为端口5555添加规则来解决错误。即便如此问题仍然存在。我发现了一些已经存在的问题,但大多数都与Java或.Net有关。我该如何解决这个错误?有人能指出我正确的方向吗?
答案 0 :(得分:0)
我不是红宝石专家,但我也看到过类似的问题。我有一个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)
答案 1 :(得分:0)
在切换到新窗口之前,请尝试切换回顶级浏览上下文。
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)
它应该隐式地执行此操作,因此如果不是,则可能是错误。如果这样做,请告诉我,以便我可以看看是否需要提交错误报告。