无法触及数组

时间:2016-01-04 17:27:03

标签: ios calabash

我试图使用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

1 个答案:

答案 0 :(得分:5)

尝试

touch("UITextField index:x")

其中x == your index

另外,请更新到calabash 0.17.0 :)

解释

Calabash环境由客户端和服务器组成。服务器作为应用程序的一部分在设备/模拟器上运行,并从客户端接收命令/查询。在这种情况下,客户端是您通过其与应用程序交互的ruby界面。

客户端负责向服务器发送足够的信息以选择要执行手势的对象。一旦执行了手势/查询,结果将以json / hashes的形式发送回客户端,这是您在控制台中看到的。区别很重要:服务器执行查询,客户​​端不执行。

当您在irb控制台中看到查询/手势的结果时,它已经被执行:返回的json只表示视图的状态,不是实际观点自己。

所以当你跑步时

touch("UITextField")[index]

这实际上相当于

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

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

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

总结

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

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

(这将搜索所有 UIScrollViews ,在其中找到包含'some text'<的文本的 UITextFields / em>,并返回此类结果的第3个)。

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