2017-04-14 78 views
1

我需要一些嚴重的幫助。當我將觸摸命令輸入到calabash-ios控制檯時,它的工作原理與所有情況一樣。例如,葫蘆觸摸命令在葫蘆島控制檯工作,但不是在運行時

touch("view marked:'Select Accounts'") 

完全按照它應該的那樣工作。

但是,當我真的用完全相同的命令運行測試時,它不起作用。它根本不會拋出任何錯誤,但應該由按鈕點擊啓動的操作不會發生。而令我感到沮喪的是,沒完沒了......真正令我難過的是,這不是一個一致的問題,有時觸控命令可以正常工作,有時候卻不行。

是否有其他人有類似的問題,如果是這樣,你是否能夠發現問題是什麼?

在此先感謝! Ade

回答

0

這可能與時間有關。通常你需要在實際觸摸之前有小的延遲。您可以通過在觸摸之前添加一個睡眠(0.5)或類似的東西來快速測試它。 您也可以在之前使用wait_for語句,但即使如此,您可能還需要添加一些延遲才能使其工作。

0

它可能是由動畫引起的。您可以使用wait_for_none_animating方法。

Click here爲文檔。

1

首先,本地化元素的最佳做法是使用唯一ID。要做到這一點,您應該填寫Xcode中應用程序元素的accessibilityIdentifier字段。

這是識別對象的最準確的方法。之後,你可以使用查詢這樣的:

query("* id:'account_select_button'") 

查詢使用的「標記」語法尋找應用程序對象的textaccessibilityIdentifier特性匹配。此方法不適用於多語言應用程序或標籤更改。

對於等待元素,你應該使用這個的sleep

wait_for_element_exists("* marked:'Select Accounts'", :timeout => 10) 
touch("* marked:'Select Accounts'") 

默認情況下,葫蘆查詢僅搜索可見對象的屬性。如果一個元素是視域之外,需要滾動,直到出現元素之前,你可以用它做任何事情:

while (query("* marked:'Select Accounts'").empty?) == true 
    swipe :up  #it performs scroll down, swipe :up equals scroll up  
    sleep 1  #in this case you have to wait between two swipes 
end 

我從來沒有嘗試過,但還有另一種方式。據我所知,這個表達式在每個視圖中查詢,而不管元素的可見性。

query("all marked:'Select Accounts'") 
query("all view marked:'Select Accounts'") 
query("all * marked:'Select Accounts'")