2014-08-27 101 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秒后找到文本滚动。你可以修改为使用你想要的。 (我只是从你的帖子中获得代码,所以如果第一次尝试修改这个错误的话)。