使用适用于Android的Calabash,如何编写滚动并触摸特定列表视图行的步骤?

时间:2014-05-18 06:01:26

标签: android cucumber calabash

我想编写一个Cucumber步骤定义,滚动并选择Android ListView中的特定行。在iOS上,我可以执行以下操作:

scroll_to_cell(:row => 1, :section => 0)
touch("tableViewCell indexPath:1,0")

我如何在Android上做同样的事情?

更新:在calabash-android源代码中,我找到了一个名为each_item的函数,它迭代列表视图中的每个项目。但是,我无法弄清楚它是如何有价值的,因为它只返回一个整数,因为它在列表视图中的位置而不是项目本身。所以,我不能做...... ...

each_item do |product|
    touch(product)
end

该功能存在于此处:https://github.com/calabash/calabash-android/blob/master/ruby-gem/lib/calabash-android/operations.rb#L145

1 个答案:

答案 0 :(得分:2)

我无法找到一般解决方案。 Android解决方案将依赖于ListView实现。


适用于特定ListView的解决方案如下:

1)首先,执行query("ListView", {:getItemAtPosition => 1})并查看查询结果中与GUI中的文本相等的属性。例如,它可以是"name"

2)然后您可以通过以下步骤触摸特定位置的项目:

Then /^I click the (\d+)(?:st|nd|rd|th) list item$/ do |row|
  scroll_to_row("ListView", row+1)
  touch "* text:\"#{query("ListView", {:getItemAtPosition => row+1})[0]["name"]}\""  
end

我已经在我的Android应用中验证了它,它确实有效。