2013-11-29 22 views
0

我在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驗證。

感謝, 亞當

回答

1

我假設你看到的問題是它總是執行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 
+0

非常感謝!只是爲了清楚它每次都在執行else部分。 – Adam6806

+0

我試過你提供的運行firefox的解決方案,它仍然執行else塊。 – Adam6806

+1

嘗試更新的答案。問題是Browser#name返回一個符號而不是一個字符串。 –

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 

我仍然不知道爲什麼原來的代碼不工作,雖然。

相關問題