2014-08-27 80 views
0

總之,我有一個自定義的步驟定義向下滾動搜索結果頁面,直到找到一個文本字符串。葫蘆/紅寶石while循環沒有結束

它向下滾動,並找到文本字符串

但while循環沒有結束,儘管它正確地向下滾動並在文本串中發現停止。

這顯然造成了我的傷痛。

Then /^I scroll until I see the "This is a test" text$/ do 
    q = query("android.widget.TextView text:'This is a test'") 
    while q.empty? 
    scroll("android.view.View id:'search_listView'", :down) 
    q = query("android.widget.TextView text:'This is a test'") 
    end 
end 

是我一直在使用的ruby。

+0

我不相信這裏有足夠的信息來確定問題的原因。當'q.empty?'返回false時,循環將會中斷。如果'q.empty?'永遠不會返回false,循環將永遠持續下去。 – Ajedi32 2014-08-27 14:42:59

+0

好的,但不是查詢(「android.widget.TextView text:'這是一個測試'」),當它發現文本字符串改變q.empty爲假 – 2014-08-27 14:52:15

+1

顯然不是,否則循環會終止。或者也許你的假設是錯誤的,'查詢(「android.widget.TextView文本:'這是一個測試'」)'沒有找到測試字符串。其中之一必須是真實的。考慮添加一些調試代碼,或者使用諸如pry調試器之類的手段來手動檢查問題的原因。 – Ajedi32 2014-08-27 14:54:39

回答

0

你使用哪個版本的葫蘆? 我已經寫了類似的步驟定義,它對我來說很完美(Calabash 0.5.1,Ruby 2.1.2)。

下面是代碼(我認爲這是更加普遍和簡單的):

Then /^I scroll down until I see '(.*?)' text$/ do |text| 
    while element_does_not_exist("TextView marked:'#{text}'") 
    scroll_down 
    end 
end 

兩個element_does_not_exist()scroll_down是葫蘆紅寶石的API函數。

而不是scroll_down你可以嘗試使用你的函數來滾動指定的ScrollView。

(編輯:對不起,我沒看評論;))

0

嘗試......

def scroll_to_text(text) 
    element = "android.widget.TextView text:'#{text}'" 
    if !element_exists(element) 
    wait_poll(:until_exists => element, :timeout => 60, :screenshot_on_error => true) do 
     scroll("android.view.View id:'search_listView'", :down) 
    end 
    end 
end 

這種方法會給你一個屏幕截圖,並提高一個錯誤,如果它沒」 t在60秒後找到文本滾動。你可以修改爲使用你想要的。 (我只是從你的帖子中獲得代碼,所以如果第一次嘗試修改這個錯誤的話)。