无法触摸数组中的第二个元素

Can't touch second element in array

我正在尝试使用 Calabash 触摸 UITextField。当我使用 query("UITextField")[x] 时,其中 x 是屏幕上文本字段数组中的数字,我可以正确查询仅一个文本字段。但是,当我使用 touch("UITextField")[x] 时,它总是会触及第一个文本字段。使用控制台和使用黄瓜 运行 测试时会发生这种情况。

这是关于我的设置的相关信息:

xcode-select --print-path
/Applications/Xcode.app/Contents/Developer

xcodebuild -version
Xcode 7.2
Build version 7C68

calabash-ios version
0.16.4

尝试

touch("UITextField index:x")

其中 x == your index.

此外,请更新至 calabash 0.17.0 :)

说明

Calabash 环境由客户端和服务器组成。服务器作为应用程序的一部分在 device/simulator 上运行,并从客户端接收 commands/queries。在这种情况下,客户端是 ruby 界面,您通过该界面与应用程序进行交互。

客户端负责向服务器发送足够的信息给 select 执行手势的对象。一旦执行了手势/查询,结果将作为 json / 哈希发送回客户端,这就是您在控制台中看到的。区别很重要:服务器执行查询,客户端不执行。

当您在 irb 控制台中看到查询/手势的结果时,它已经执行了:json 即 returned 仅表示视图的状态,不是实际观点本身。

所以当你 运行

touch("UITextField")[index]

这实际上等同于

touch_results = touch("UITextField")
touch_results[index]

在第一行中,touch_results 正在接收受对 "UITextField" 的查询结果执行 touch 影响的元素的 json 表示,这意味着当您尝试使用 touch_results[index] 访问结果时,touch 事件已经完成。

另一种思考方式是:给定 res = touch(query)query 是用于指定实际视图的部分,而 res 只是 json表示这些视图的状态/查询或手势的结果。

总结

当您需要更具体的查询时,说明符需要进入查询内部。例如,

touch("all UIScrollView UITextField marked:'some text' index:2")

(这将搜索 all UIScrollViews ,找到其中的任何 UITextFields包含文本匹配 'some text' 和 return 第三个这样的结果)。

有关查询语言语法的完整说明,请参阅 the docs