Я предполагаю, что проблема, которую вы видите, заключается в том, что она всегда выполняет часть 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
person
Justin Ko
schedule
29.11.2013