强制浏览器结束当前步骤

时间:2011-07-18 17:12:57

标签: javascript cucumber watir

需要:

使用 Cucumber 1.0.1 Watir 1.9.2 ,我需要执行javascript代码,以便专有门户网站执行某些操作导航

问题:

我可以使用以下代码执行JS代码:

def execute_js(js_code)
  @browser.goto("javascript:#{js_code};void(0)")
end

execute_js("doNavigate()")

通过这样做,导航按预期完成,但Watir不会重新控制浏览器。

我在找什么:

我在'javascript goto'之后寻找Watir重新控制浏览器的解决方案。

经过测试的替代方案:

@browser.execute_script('alert("toto");')

给了我这个:

  execScript
      OLE error code:80070005 in <Unknown>
        Access Denied.

      HRESULT error code:0x80020009
        An exception occurred. (WIN32OLERuntimeError)
  ./features/lib/portal.rb:110:in `tln_main_tab'

本地宝石:

  • Ascii85(0.9.0)
  • builder(3.0.0)
  • bundler(1.0.15)
  • capybara(1.0.0)
  • childprocess(0.1.9)
  • commonwatir(1.9.2)
  • 黄瓜(1.0.1)
  • diff-lcs(1.1.2)
  • ffi(1.0.9 x86-mingw32)
  • firewatir(1.9.2)
  • fuubar-cucumber(0.0.12)
  • 小黄瓜(2.4.5 x86-mingw32)
  • hoe(2.10.0)
  • json(1.5.3)
  • json_pure(1.5.3)
  • mime-types(1.16)
  • nokogiri(1.5.0 x86-mingw32)
  • pdf-reader(0.9.0)
  • prawn(0.11.1)
  • rack(1.3.0)
  • rack-test(0.6.0)
  • rake(0.9.2)
  • rautomation(0.6.2)
  • rspec(2.6.0)
  • rspec-core(2.6.4)
  • rspec-expectations(2.6.0)
  • rspec-mocks(2.6.0)
  • ruby​​-progressbar(0.0.10)
  • ruby​​gems-update(1.8.5)
  • ruby​​zip(0.9.4)
  • s4t-utils(1.0.4)
  • selenium-webdriver(0.2.2)
  • 语法(1.0.0)
  • term-ansicolor(1.0.5)
  • ttfunk(1.0.1)
  • 用户选择(1.1.6.1)
  • viewcumber(0.1.2)
  • watir(1.9.2)
  • win32-api(1.4.8 x86-mingw32)
  • win32-process(0.6.5)
  • win32console(1.3.0 x86-mingw32) -windows-api(0.4.0)
  • windows-pr(1.2.0)
  • xml-simple(1.1.0)
  • xpath(0.1.4)

2 个答案:

答案 0 :(得分:1)

我找到了解决方法:

def execute_js(js_code)
  begin
    Timeout::timeout(2) do
      @browser.goto("javascript:#{js_code};void(0)")
    end
  rescue Exception => e
    goto "#{@browser.url}#"  # <<< workaround is here
    return
  end
end

execute_js("doNavigate()")

这不是理想的,但它可以启用javascript执行,然后更新URL哈希,以便Watir 知道实际操作已完成,以便Watir可以更进一步。

答案 1 :(得分:0)

Access Denied错误消息通常连接到页面上的帧。请查看Watir wiki的Frames页面。