我假設你看到的問題是它總是執行if部分而不是其他部分。你的問題可以簡化爲:
browser = 'ie'
if browser == 'firefox' or 'chrome'
puts 'mouseover'
else
puts 'hover'
end
#=> "mouseover" (which is not as desired)
的問題是,你如果聲明說,(瀏覽器需要等於「火狐」)或(字符串「鉻」必須是truthy)。後者將永遠是真實的,這就是爲什麼你總是得到如果部分執行。
你需要做的:
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:
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
非常感謝!只是爲了清楚它每次都在執行else部分。 – Adam6806
我試過你提供的運行firefox的解決方案,它仍然執行else塊。 – Adam6806
嘗試更新的答案。問題是Browser#name返回一個符號而不是一個字符串。 –