Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby Watir webdriver鼠标悬停-Firefox和Chrome IE的区别_Ruby_Webdriver_Automated Tests_Watir_Watir Webdriver - Fatal编程技术网

Ruby Watir webdriver鼠标悬停-Firefox和Chrome IE的区别

Ruby Watir webdriver鼠标悬停-Firefox和Chrome IE的区别,ruby,webdriver,automated-tests,watir,watir-webdriver,Ruby,Webdriver,Automated Tests,Watir,Watir Webdriver,我试图用方法.hover在一个公共网站上发射鼠标,但它似乎只在Chrome上工作。其他浏览器会生成错误或不显示任何信息 我尝试过类似Watir的.fire\u event或.execute\u script等替代方法,但在Firefox和IE上都失败了。Watir Classic给出了相同的结果 我不明白这是关于Watir语法的问题,关于浏览器特定语法的问题,还是关于不支持的浏览器版本的问题 require "rubygems" require "watir-webdriver" BROWSE

我试图用方法
.hover
在一个公共网站上发射鼠标,但它似乎只在Chrome上工作。其他浏览器会生成错误或不显示任何信息

我尝试过类似Watir的
.fire\u event
.execute\u script
等替代方法,但在Firefox和IE上都失败了。Watir Classic给出了相同的结果

我不明白这是关于Watir语法的问题,关于浏览器特定语法的问题,还是关于不支持的浏览器版本的问题

require "rubygems"
require "watir-webdriver"

BROWSER = Watir::Browser.new :chrome
BROWSER.goto("http://france.meteofrance.com/")
sleep 10 # wait until flash ads are closed
BROWSER.a(:class, "p593500Content").when_present.hover # works, on Chrome only
puts BROWSER.div(:id, "p593500Content").style # position of div after a.hover: left: 249px; top: 223px;

# Chrome - OK, tooltip displayed
# Firefox 7 to 19 - KO: d is undefined in driver_component.js (sometimes l. 7024, or l. 8587)
# IE8, IE9 - KO (maybe OK with IE7): 'unable to locate element, using {:class=>"p593500Content", :tag_name=>"a"}', nothing occurs
Ruby版本和Gem列表:

ruby 1.9.3p392 (2013-02-22) [i386-mingw32]

bigdecimal (1.1.0)                  rspec-expectations (2.13.0)
builder (3.2.0)                     rubyzip (0.9.9)
childprocess (0.3.9)                s4t-utils (1.0.4)
commonwatir (4.0.0)                 selenium-webdriver (2.31.0)
cucumber (1.2.3)                    subexec (0.2.2)
diff-lcs (1.2.1)                    user-choices (1.1.6.1)
ffi (1.6.0 x86-mingw32)             watir (4.0.2 x86-mingw32)
gherkin (2.11.6 x86-mingw32)        watir-classic (3.6.0)
hoe (3.5.2)                         watir-page-helper (1.0.3)
io-console (0.3)                    watir-webdriver (0.6.2)
json (1.7.7, 1.5.5)                 websocket (1.0.7)
mini_magick (3.5.0)                 win32-api (1.4.8 x86-mingw32)
minitest (2.5.1)                    win32-process (0.7.1)
multi_json (1.7.2)                  win32screenshot (1.0.8)
nokogiri (1.5.7.rc3 x86-mingw32)    windows-api (0.4.2)
rake (0.9.2.2)                      windows-pr (1.2.2)
rautomation (0.8.0)                 xml-simple (1.1.2)
rdoc (3.9.5)

您在IE中看到的错误出现在它尝试悬停之前。它的意思是,它找不到你想要调用hover的东西。所以你需要弄清楚为什么会这样

一些潜在原因:

  • 运行这些浏览器(或浏览器)的系统速度足够慢,以至于元素尚未呈现(通常是客户端javascript或ajax类型的操作)
  • HTML是不同的,项目具有不同的属性。(顺便说一句,在你的案例中,这似乎不是问题,至少不是基于IE8中的该站点)
  • HTML是不同的,项目在一个框架中
  • 其他一些事情正在发生,这会阻止在那一刻访问DOM,例如,您可能有某种模式,比如浏览器要求安装flash或某种插件之类的
  • 浏览器设置中的某些内容会阻止渲染元素
要尝试的一件事可能是延长when_present操作的超时时间,以给它更多的时间

一个潜在的故障排除步骤可能是在该行之前放置一些睡眠,并以10秒的间隔抓拍一些屏幕截图,这样您就可以看到(至少在视觉上)浏览器在该点渲染的内容是在Nord Pas de Calais渲染的地图的那一部分?。是否存在模式弹出窗口或其他浏览器警告


FF问题似乎与错误完全不同,这似乎是一个webdriver问题

Firefox的问题可能与Webdriver级别的支持有关。我很确定driver_component.js是webdriver代码。我们可能需要在另一个问题中处理这个问题。但首先,你能做一个
gem list
命令并把输出结果放到问题中去吗(至少对于任何与watir或webdriver相关的版本来说)我添加了ruby版本和gem list,还有我的Chrome和IE服务器版本(我想Firefox没有服务器):“ChromeDriver端口=9515版本=26.0.1383.0”和“InternetExplorerDriver服务器(32位)2.31.0.0侦听端口5555”。来自:“当您试图将鼠标悬停在元素上,而实际鼠标光标位于IE浏览器窗口的边界内时,鼠标悬停将不起作用。”。更具体地说,悬停将在几分之一秒内工作,然后元素将恢复到其以前的状态。。。WebDriver开发团队无法找到IE这种行为的解决方法。“对于IE,我通过语法更改来显示悬停元素,将(:class,“p59350Content”)更改为(:class,/p59350Content/)或(:class,/^p59350Content$/)首先,我认为:类的字符串值的处理方式与regexp不同,但在“如何”和“从”中没有提到任何内容。然后,经过计时测试,我注意到它在Chrome中的运行速度为35秒,在IE中的运行速度为58秒(等待这么长时间太痛苦了),我知道自从更改为Webdriver后,regexp的速度并不快…最后我强制使用“sleep 70”和:class的字符串值在IE中工作了一段时间,但它不是每次都工作,而regexp似乎更稳定。我尝试了。当出现(100)并增加b.driver.manage.timeouts.implicit\u时,但都失败了(100秒后超时,等待a出现)。这样的副作用很难处理。对于Firefox,我会尝试更正driver_component.js中的“undefined variable”错误并在本地重试,但您知道我需要更新的默认文件driver_component.js的位置吗?因为我认为每次运行wat时都会在“…/AppData/Local/Temp/webdriver profile…”中创建一个新的配置文件ir,因此每次都会重新创建文件driver_component.js。不幸的是,我对webdriver级别的内容只了解很少。一个原因是,将该问题分解为自己的问题,并确保该问题已标记为webdriver,或者在webdriver组中寻求帮助。我对这些内容非常熟悉在Watir级别,这里的其他一些人也在寻找带有Watir或Watir webdriver标记的东西。IE的问题在该级别上相当严重,因为它更多的是关于如何与看起来非常慢的站点同步。据我所知,隐式等待会等待很长时间,直到任何元素出现在任何测试中。这可能会导致很多问题如果您遇到测试失败或等待某件事情消失的情况,那么您最好使用较小的隐式等待值,并在需要时特别覆盖超时,或者(呃)在知道后端处理某件事情总是需要x时间时使用固定睡眠。