【发布时间】:2011-07-20 17:21:01
【问题描述】:
需要:
使用 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)
- 捆绑器 (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