葫芦/红宝石while循环没有结束
问题描述:
总之,我有一个自定义的步骤定义向下滚动搜索结果页面,直到找到一个文本字符串。葫芦/红宝石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。
答
你使用哪个版本的葫芦? 我已经写了类似的步骤定义,它对我来说很完美(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。
(编辑:对不起,我没看评论;))
答
尝试......
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秒后找到文本滚动。你可以修改为使用你想要的。 (我只是从你的帖子中获得代码,所以如果第一次尝试修改这个错误的话)。
我不相信这里有足够的信息来确定问题的原因。当'q.empty?'返回false时,循环将会中断。如果'q.empty?'永远不会返回false,循环将永远持续下去。 – Ajedi32 2014-08-27 14:42:59
好的,但不是查询(“android.widget.TextView text:'这是一个测试'”),当它发现文本字符串改变q.empty为假 – 2014-08-27 14:52:15
显然不是,否则循环会终止。或者也许你的假设是错误的,'查询(“android.widget.TextView文本:'这是一个测试'”)'没有找到测试字符串。其中之一必须是真实的。考虑添加一些调试代码,或者使用诸如pry调试器之类的手段来手动检查问题的原因。 – Ajedi32 2014-08-27 14:54:39