需要:
使用 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 不会重新控制浏览器。
我在寻找什么:
我正在寻找一种解决方案,让 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)
- bundler (1.0.15)
- capybara (1.0.0)
- 子进程 (0.1.9)
- 公共(public)服务 (1.9.2)
- cucumber (1.0.1)
- diff-lcs (1.1.2)
- ffi (1.0.9 x86-mingw32)
- 防火墙 (1.9.2)
- fuubar- cucumber (0.0.12)
- 小 cucumber (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)
- 自动化(0.6.2)
- rspec (2.6.0)
- rspec 核心 (2.6.4)
- rspec-expectations (2.6.0)
- rspec 模拟 (2.6.0)
- ruby 进度条 (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)
- watir (1.9.2)
- win32-api (1.4.8 x86-mingw32)
- win32 进程 (0.6.5)
- win32 控制台 (1.3.0 x86-mingw32) -windows-api (0.4.0)
- windows-pr (1.2.0)
- xml-简单 (1.1.0)
- xpath (0.1.4)
最佳答案
我找到了解决方法:
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 可以走得更远。
关于javascript - 强制浏览器结束当前步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6736624/