我正在使用Chrome Firefox和IE中的Watir进行测试。在Chrome和Firefox中,mouseover事件可以解决问题,但在IE中我必须使用悬停。代码工作正如我在所有三个浏览器的if语句之外测试的那样。我似乎无法得到这个if语句正常工作。有什么想法吗?
if @browser.name == 'firefox' or 'chrome'
@browser.span(:text => /#{tab_name}/i).parent.fire_event 'mouseover'
else
@browser.span(:text => /#{tab_name}/i).parent.hover
end
@browser.name
使用puts
验证后正确返回。
谢谢, 亚当
答案 0 :(得分:1)
我认为你遇到的问题是它总是执行if部分而不是else部分。您的问题可以简化为:
browser = 'ie'
if browser == 'firefox' or 'chrome'
puts 'mouseover'
else
puts 'hover'
end
#=> "mouseover" (which is not as desired)
问题是你的if语句说(浏览器需要等于“firefox”)或者(字符串“chrome”必须是真的)。后者将永远为真,这就是为什么你总是得到if部分执行。
你需要这样做:
browser = 'ie'
if browser == 'firefox' or browser == 'chrome'
puts 'mouseover'
else
puts 'hover'
end
#=> "hover" (as desired)
它也可以更好地写成:
browser = 'ie'
if ['firefox', 'chrome'].include?(browser)
puts 'mouseover'
else
puts 'hover'
end
#=> "hover" (as desired)
还有第二个问题 - @browser.name
永远不会是'firefox'或'chrome'。 Browser#name返回符号而不是字符串。例如,使用Firefox:
require 'watir'
browser = Watir::Browser.new :firefox
puts browser.name.class
#=> Symbol
p browser.name
#=> :firefox
您需要将@browser.name
与相应的符号相匹配 - :firefox
和:chrome
。
因此,采用这两个概念并回到原始代码,可以通过以下方法修复:
if [:firefox, :chrome].include?(@browser.name)
@browser.span(:text => /#{tab_name}/i).parent.fire_event 'mouseover'
else
@browser.span(:text => /#{tab_name}/i).parent.hover
end
答案 1 :(得分:0)
我想出了一个临时解决方案。我正在捕获webdriver的异常,并使用其他代码行进行抢救:
begin
@browser.span(:text => /#{tab_name}/i).parent.hover
rescue Selenium::WebDriver::Error::InvalidElementStateError
@browser.span(:text => /#{tab_name}/i).parent.fire_event 'mouseover'
end
我仍然不确定为什么原始代码不起作用。