1

我已经在 Ruby 1.9.2 和 IE8 和 1.9.3 和 IE9 中复制了这个 Watir Webdriver 问题;如果我使用 Chrome 或 Firefox,它似乎不会发生。操作系统是 Windows 7(64 位)。

当我使用 Watir Webdriver 单击某些链接时,该操作成功完成(因为浏览器转到链接的 href),但看起来 click 事件一直在触发。这在将鼠标悬停在链接上会导致出现下拉菜单的情况下最为明显:单击链接后,下拉菜单将保持可见,直到浏览器关闭(当然,前提是您正在查看包含该链接的页面)关联)。

对我来说真正的阻碍是,一旦发生这种情况,我就无法单击任何其他链接。我发现让 IE 恢复正常状态的唯一方法是关闭并重新打开浏览器。

一个例子:

require 'rubygems'
require 'watir-webdriver'
include Watir
b=Browser.new :ie
# This produces the following output:
# Started InternetExplorerDriver server (64-bit)
# 2.28.0.0
# Listening on port 5555
# => #<Watir::Browser:0x..fe85636c0 url="http://localhost:5555/" title="WebDriver">

b.goto 'www.net-a-porter.com'
b.link(:text,'Designers').click

此时,IE 显示了我期望的页面(http://www.net-a-porter.com/Shop/AZDesigners),但 Designers 下拉菜单仍然可见,它不应该是,并且 href原始链接仍然显示在 IE 的状态栏中。

起初我认为这是这个特定网站的错误,但类似的事情发生在 yahoo.com 上,使用以下代码:

b.goto 'www.yahoo.com'
b.link(:text,'Sport').click

雅虎!体育页面加载,但 URL 在状态栏中不断闪烁,并且出现“足球”下拉菜单。这是一个屏幕截图,向您展示我的意思:

导航完成后显示下拉菜单的屏幕截图仍然可见

现在,当我调整浏览器的大小以截取该屏幕截图时,我注意到随着边距减小和内容向左移动以适应更小的可用空间,出现了不同的菜单。因此,似乎有一个杂散的鼠标单击在同一位置不断重复。

这可能是 Watir Webdriver 或 Selenium 中的错误吗?

这是我的宝石清单:

  • 可寻址 (2.3.2)
  • 建设者(3.1.4)
  • 捆绑器 (1.2.3)
  • 子进程(0.3.6)
  • 码雷 (1.0.8)
  • 分列(0.3.6)
  • 普通人 (4.0.0, 2.0.4)
  • 黄瓜 (1.2.1)
  • 调试器(1.2.3、1.2.2)
  • 调试器-linecache (1.1.2)
  • 调试器-ruby_core_source (1.1.6, 1.1.5)
  • diff-lcs (1.1.3)
  • 不同(0.1.2)
  • ffi (1.2.0 x86-mingw32)
  • 小黄瓜(2.11.5 x86-mingw32)
  • 高线 (1.6.15)
  • 锄头 (3.4.0)
  • hpricot (0.8.6)
  • json (1.7.6, 1.7.5)
  • libwebsocket (0.1.7.1)
  • 记录器(1.2.8)
  • 方法源(0.8.1)
  • mini_magick (3.4, 3.2.1)
  • minitest (4.3.3, 1.6.0)
  • multi_json (1.5.0)
  • mysql2 (0.3.11 x86-mingw32)
  • nokogiri (1.5.6 x86-mingw32)
  • pg (0.14.1 x86-mingw32)
  • 撬 (0.9.10 i386-mingw32)
  • 撬文档(0.4.4)
  • 耙子 (10.0.3, 0.8.7)
  • rautomation (0.8.0, 0.7.3, 0.6.3)
  • rbx-require-relative (0.0.9)
  • rdoc (3.12, 2.5.8)
  • rspec (2.12.0)
  • rspec 核心 (2.12.2)
  • rspec-expectations (2.12.1)
  • rspec 模拟 (2.12.1, 2.12.0)
  • rubygems 更新 (1.8.24)
  • rubyzip (0.9.9)
  • s4t-utils (1.0.4)
  • 硒网络驱动程序(2.27.2)
  • 斜坡 (3.3.3)
  • 子执行 (0.2.2, 0.0.4)
  • 用户选择 (1.1.6.1)
  • 瓦蒂尔 (4.0.2 x86-mingw32, 2.0.4)
  • 水经典(3.3.0)
  • 水网驱动程序(0.6.2)
  • 网络套接字(1.0.6、1.0.5)
  • win32-api (1.4.8 x86-mingw32)
  • win32 进程 (0.7.0)
  • win32console (1.3.2 x86-mingw32)
  • win32截图 (1.0.7)
  • windows-api (0.4.2)
  • windows-pr (1​​.2.2)
  • xml-简单 (1.1.2)
  • 码 (0.8.3)
4

1 回答 1

2

这不是一个错误,这是一个功能。:) 您所看到的是 IE 驱动程序中引入的 hack 的一个不幸的副作用,它试图解决如果物理鼠标光标位于 IE 窗口边界内时悬停不存在的问题。

要解决此问题,您有两个选择,都涉及在创建驱动程序时设置驱动程序的功能。首先,您可以通过将“enablePersistentHover”功能设置为 false 来恢复之前的行为。正如您所描述的,这将停止闪烁。其次,您可以通过将“nativeEvents”功能设置为 false 来使用模拟的 JavaScript 鼠标事件而不是所谓的“本机事件”。显然,这些是相互排斥的方法,不应该一起使用。

于 2013-01-02T09:41:43.543 回答