Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 使用Selenium Webdriver切换窗口时出错_Ruby_Internet Explorer_Selenium_Selenium Webdriver - Fatal编程技术网

Ruby 使用Selenium Webdriver切换窗口时出错

Ruby 使用Selenium Webdriver切换窗口时出错,ruby,internet-explorer,selenium,selenium-webdriver,Ruby,Internet Explorer,Selenium,Selenium Webdriver,我已经编写了一个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.swit

我已经编写了一个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:/Ruby21/lib/ruby/2.1.0/net/http.rb:879:in'initialize':否 由于目标计算机主动拒绝,因此无法建立连接 它连接“127.0.0.1”端口5555的(2)(错误号::ECONREFUSE) 来自C:/Ruby21/lib/ruby/2.1.0/net/http.rb:879:in'open' 来自C:/Ruby21/lib/ruby/2.1.0/net/http.rb:879:in'block in connect' 来自C:/Ruby21/lib/ruby/2.1.0/timeout.rb:75:in'timeout' 来自C:/Ruby21/lib/ruby/2.1.0/net/http.rb:878:in'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' 来自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 “原始执行” 来自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 “切换到窗口” 来自C:/Ruby21/lib/ruby/gems/2.1.0/gems/selenium-webdriver-2.48.1/lib/selenium/webdriver/common/target_locator.rb:81:in “窗口” 来自脚本。rb:18:in“”


我试图通过修改防火墙和添加端口5555的规则来解决这个错误。即便如此,这个问题依然存在。我发现了一些已经存在的问题,但大多数都与Java或.Net有关。如何解决此错误?有人能给我指出正确的方向吗?

我不是ruby专家,但我见过类似的问题发生。我有一个Python ic解决方案。你所需要做的就是用Ruby编辑代码


在切换到新窗口之前,请尝试切换回顶级浏览上下文

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。如果这样做有效,请告诉我,这样我就可以知道我们是否需要提交错误报告。

在chrome或firefox上也会发生同样的情况吗?该网站是IE特有的。它不会在其他浏览器上打开。在单击并转到新窗口之前,请保存第一个网页的wnidow句柄,然后单击并在操作完成后使用保存的窗口句柄返回原始屏幕。我目前正在执行相同的操作。“count_cell.click”是打开一个新页面的步骤。如果你能提供一些html/css/js来重现这个问题,它可能会帮助我们调试。最简单的例子可以重现它。值得一提的是,他使用的Ruby代码是切换到Ruby中的窗口的合适方法。你能验证有多个窗口打开吗?你能验证这段代码在Firefox或Chrome上运行吗?另外,我还被提醒窗口句柄不会随任何顺序返回,所以我修改了我提供的代码。
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)