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