2013-05-14 15 views
6

Mam dokładnie to samo pytanie, co post, poniżej, z tym, że potrzebuję go do pracy na Androida, a post poniżej dotyczy iOS. Próbowałem obu rozwiązań podanych w tym poście, ale wydaje się, że nie działają one dla Androida. Cała pomoc jest doceniana!Jak przewinąć ListView, aż zobaczę konkretny ciąg z Calabash-Androidem

How do i scroll a UITable view down until i see a cell with label "Value" in Calabash

+0

http://stackoverflow.com/questions/31120310/calabash-android-looping-through-a-listview-to-check/32471752#32471752 mam odpowiedzieć na to pytanie tutaj :) –

Odpowiedz

11

można dodać tę nową definicję krok i powinno załatwić sprawę dla Androida:

Then /^I scroll until I see the "([^\"]*)" text$/ do |text| 
    q = query("TextView text:'#{text}'") 
    while q.empty? 
    scroll_down 
    q = query("TextView text:'#{text}'") 
    end 
end 

To działa dla mnie i mam nadzieję, że robi to samo dla Ciebie!

+1

Hi Proghero. performAction jest przestarzałe, ponieważ tykwa 0.5. Czy zdarzy ci się mieć fragment, który działa na najnowszą wersję kalabasy? –

+1

Po prostu zmień ** performAction ('scroll_down') ** na: ** scroll_down ** –

+1

Powinien być limit czasu dla tej metody, ponieważ może on trwać przez czas nieokreślony. – Tobias

1

performAction('scroll_down')

W oświadczeniu performAction() jest przestarzała od tykwa 0,5 więc nie ważne z najnowszą wersją

Moje rozwiązanie będzie,

def scroll_until_I_see(id) 
    until element_exists("* marked:'#{id}'") do 
    scroll("ScrollView", :down) 
    end 
end 
+0

Narandra @ To rozwiązanie sprawdziło się u mnie. Podkreśliłem również składnię dla lepszego zrozumienia ... – Aravin

+1

To jest świetne @Aravin. Przypuszczam, że zaznaczyłeś moje rozwiązanie jako "Ta odpowiedź jest przydatna"? – NarendraC

+0

Tak. to rozwiązało mój problem. – Aravin

1
#get total row count  
    count=query("ListView",:getCount).first.to_i 
    var=0 
    count.times { 
     query("ListView",{:smoothScrollToPosition=>var}) 
     var+=1 
     puts "#{count} #{var}" 
     #break if id found 
     break if element_exists("* marked:'#{id}'") 
     #fail if all rows are checked 
     fail("#{id} is missing") if var==count 
    } 
0

Oto metoda , przewinie ekran i zwróci element lub pustą tablicę, jeśli element nie zostanie znaleziony.

def find_if_exist(text) 
    query_result = query("* marked:'#{text}'") 
    current_screen_state = query('*') 
    prev_screen_state = [] 

    while (query_result.empty? and (current_screen_state != prev_screen_state)) 
    prev_screen_state = current_screen_state 
    perform_action('drag', 50, 50, 60, 40, 20) 
    current_screen_state = query('*') 
    query_result = query("* marked:'#{text}'") 
    end 
    query_result 
end 
0

Mam widok zagnieżdżony, więc przewijanie w dół z funkcją scroll_down spowoduje i tak "powrót widoku przewijania". więc na podstawie tego, co wszystkie omówione znaleźć tę jedną pracę:

scroll("android.support.v4.widget.NestedScrollView",:down)

i przewija w dół, ale tylko przewija jeden raz.