【问题标题】:Watir Webdriver in IE8, click link, event seems to keep firing for everIE8中的Watir Webdriver,单击链接,事件似乎永远触发
【发布时间】:2012-12-31 17:27:12
【问题描述】:

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

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

对我来说真正令人震惊的是,一旦发生这种情况,我就无法单击任何其他链接。我发现让 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)
  • coderay (1.0.8)
  • 列 (0.3.6)
  • commonwatir (4.0.0, 2.0.4)
  • 黄瓜 (1.2.1)
  • 调试器(1.2.3、1.2.2)
  • 调试器-linecache (1.1.2)
  • debugger-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)
  • method_source (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)
  • pry-doc (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-core (2.12.2)
  • rspec 期望 (2.12.1)
  • rspec-mocks (2.12.1, 2.12.0)
  • rubygems 更新 (1.8.24)
  • rubyzip (0.9.9)
  • s4t-utils (1.0.4)
  • selenium-webdriver (2.27.2)
  • 斜率 (3.3.3)
  • subexec (0.2.2, 0.0.4)
  • 用户选择 (1.1.6.1)
  • watir (4.0.2 x86-mingw32, 2.0.4)
  • watir-classic (3.3.0)
  • watir-webdriver (0.6.2)
  • websocket (1.0.6, 1.0.5)
  • win32-api (1.4.8 x86-mingw32)
  • win32 进程 (0.7.0)
  • win32console (1.3.2 x86-mingw32)
  • win32screenshot (1.0.7)
  • windows-api (0.4.2)
  • windows-pr (1​​.2.2)
  • xml-simple (1.1.2)
  • 码 (0.8.3)

【问题讨论】:

    标签: ruby windows-7 selenium internet-explorer-8 watir-webdriver


    【解决方案1】:

    这不是错误,而是功能。 :) 您看到的是 IE 驱动程序中引入的黑客攻击的不幸副作用,该黑客攻击试图解决如果物理鼠标光标位于 IE 窗口边界内时悬停不持久的问题。

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

    【讨论】:

    • 感谢吉姆埃文斯的回答!我认为将 enablePersistentHover 功能设置为 false 是在这种特殊情况下进行的最佳方法。但是(很抱歉在这里有点没用)我还没有设法做到这一点。很多谷歌搜索让我找到b=Browser.new(:ie, enablePersistentHover: false),但返回ArgumentError: unknown option: {:enablePersistentHover=&gt;false}。该行是否有明显错误?
    • 没什么明显的,但我既不精通 Watir,也不精通 WebDriver 的 Ruby 语言绑定。就该特定问题寻求其他帮助是值得的。
    • 我不知道如何关闭持久悬停,但我最终设法通过像这样启动浏览器来禁用本机事件:b=Browser.new :ie,{:native_events=&gt;false}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-28
    • 2022-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多