【问题标题】:Force the browser to end the current step强制浏览器结束当前步骤
【发布时间】:2011-07-20 17:21:01
【问题描述】:

需要:

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

问题:

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

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

execute_js("doNavigate()")

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

我在寻找什么:

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

经过测试的替代方案:

@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)
  • 构建器 (3.0.0)
  • 捆绑器 (1.0.15)
  • 水豚 (1.0.0)
  • 子进程 (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-黄瓜 (0.0.12)
  • 小黄瓜 (2.4.5 x86-mingw32)
  • 锄头 (2.10.0)
  • json (1.5.3)
  • json_pure (1.5.3)
  • mime 类型 (1.16)
  • nokogiri (1.5.0 x86-mingw32)
  • pdf 阅读器 (0.9.0)
  • 大虾 (0.11.1)
  • 机架 (1.3.0)
  • 机架测试 (0.6.0)
  • 耙子 (0.9.2)
  • rautomation (0.6.2)
  • rspec (2.6.0)
  • rspec-core (2.6.4)
  • rspec-expectations (2.6.0)
  • rspec 模拟 (2.6.0)
  • ruby-progressbar (0.0.10)
  • rubygems 更新 (1.8.5)
  • rubyzip (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)
  • 水 (1.9.2)
  • win32-api (1.4.8 x86-mingw32)
  • win32 进程 (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)

【问题讨论】:

  • 为什么要这样直接执行JS代码呢?普通用户不可能这样做,为什么不像用户那样与系统交互呢?
  • 专有门户网站大量使用 javascript 来创建一个 99% JS 和 1% HTML 的顶级导航菜单。事实上,菜单链接似乎不在 DOM 中……这就是为什么我觉得我唯一的导航方式是使用它的标准机制:使用它自己的 javascript 函数。
  • 您可以通过触发表示各种用户操作、鼠标悬停、鼠标按下等的事件,以用户的方式进行导航。关键在于了解哪些事件正在由哪些元素监视。有时它就像 div 或单元格上的 .click 方法一样简单(取决于控件的创建方式。在其他情况下,可能需要特定的序列,例如首先将鼠标悬停,然后将控件置于以下状态它可以接受点击。手动交互时仔细观察通常会给你很好的线索,就像使用浏览器开发工具一样。

标签: javascript cucumber watir


【解决方案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 可以走得更远。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我的页面根本没有任何框架。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    相关资源
    最近更新 更多