2015-01-14 21 views
1

我使用的是calabash-android版本0.5.5控制台与我的应用程序进行交互,除了几乎没有任何我的元素具有ID之外,一切运行正常。我正在使用的应用程序是使用Titanium制作的,我正在搜索的元素在我的代码中设置了id。Calabash Android控制台没有显示任何ID

当我打印所有视图的ID像这样query("*",:id)我只得到NoResourceEntry和零。例如:

[ 0] nil, 
[ 1] "NoResourceEntry-86", 
[ 2] "NoResourceEntry-87", 
[ 3] "NoResourceEntry-88", 
[ 4] nil, 
[ 5] nil 

什么可能是错的?

回答

0

你可以尝试:

query("*").map{|e| e['id']} 
+0

我得到同样的结果与'查询数组进行查询(“*”) .MAP {| E | e ['id']}' – rodrigobdz

+0

它与钛本身有什么关系?我注意到Titanium中使用的元素ID不会传递到编译的iOS和Android本机项目。我已经尝试设置辅助功能标签失败,以便能够唯一识别我的元素,但这种方法无效。当我查询Android元素时,会出现'nil'或'NoResourceEntry-XY'。当我使用'query(“view”,:marked)查询iOS元素时''我为每个元素获得'[i]“******”''作为元素编号 – rodrigobdz

+0

'query('view' ,:已标记)'与在每个视图上调用'marked'相同。在Objective-C术语中,'UIView'不响应'marked',所以你得到“******”。在Java中,你会得到一个'NotSuchMethod'异常。 – jmoody

0

我能够通过使用accessibilityLabel属性来解决这个问题,在这个问题上解释说:

https://github.com/appersonlabs/TiCalabash/issues/9

添加accessibilityLabel到您的元件匹配元素的ID

<View id="myView" accessibilityLabel="myView"> 
...     
</View> 

,然后你可以从葫芦,机器人控制台

query("* marked:'myView.'") 

应返回匹配的元素

[0] { 
    "class" => "org.appcelerator.titanium.view.TiCompositeLayout", 
    "tag" => nil, 
    "description" => "org.appcelerator.titanium.view.TiCompositeLayout{3f90638 V.E...CL. ........ 0,0-205,173 #14}", 
    "id" => "NoResourceEntry-20", 
    "visible" => true, 
    "rect" => { 
      "height" => 173, 
      "width" => 205, 
       "y" => 1621, 
       "x" => 0, 
     "center_x" => 102, 
     "center_y" => 1707 
    }, 
       "enabled" => true, 
    "contentDescription" => "myView." 
}] 
相关问题