2016-04-03 32 views
0

我刚开始使用Calabash,我试图测试在Genymotion下运行的Android应用程序。Calabash使用查询命令的意外结果

当运行简单的测试来启动应用程序并查看初始屏幕,我可以看到屏幕显示在Genymotion模拟器但是当我使用该查询命令

puts(query('*')) 

我没有看到任何的预期的内容(例如屏幕标题)在返回的结果中。

相反,我只看到:

[{"id"=>nil, "enabled"=>true, "contentDescription"=>nil, "visible"=>true, "tag"=>nil, "description"=>"com.android.internal.policy.impl.PhoneWindow$DecorView{52824ec0 V.E..... R 
....... 0,0-1080,1920}", "class"=>"com.android.internal.policy.impl.PhoneWindow$DecorView", "rect"=>{"center_y"=>960, "center_x"=>540, "height"=>1920, "y"=>0, "width"=>1080, "x"=>0}} 
, {"id"=>nil, "enabled"=>true, "contentDescription"=>nil, "visible"=>true, "tag"=>nil, "description"=>"android.widget.LinearLayout{528127a0 V.E..... ........ 0,0-1080,1920}", "class" 
=>"android.widget.LinearLayout", "rect"=>{"center_y"=>960, "center_x"=>540, "height"=>1920, "y"=>0, "width"=>1080, "x"=>0}}, {"id"=>"content", "enabled"=>true, "contentDescription"=> 
nil, "visible"=>true, "tag"=>nil, "description"=>"android.widget.FrameLayout{5280cab8 V.E..... ........ 0,0-1080,1920 #1020002 android:id/content}", "class"=>"android.widget.FrameLay 
out", "rect"=>{"center_y"=>960, "center_x"=>540, "height"=>1920, "y"=>0, "width"=>1080, "x"=>0}}, {"id"=>"NoResourceEntry-100", "enabled"=>true, "contentDescription"=>"Web View", "vi 
sible"=>true, "tag"=>nil, "description"=>"org.apache.cordova.engine.SystemWebView{52821914 VFEDH.C. .F...... 0,0-1080,1920 #64}", "class"=>"org.apache.cordova.engine.SystemWebView", 
"rect"=>{"center_y"=>960, "center_x"=>540, "height"=>1920, "y"=>0, "width"=>1080, "x"=>0}}] 

我在做什么错?

回答

2

您所看到的是由科尔多瓦生成的Android应用程序的布局。 Cordova在SystemWebView中显示来自您的应用程序的所有内容,因此您希望在那里查找您的HTML。你可以看到在Web视图整个页面的HTML与此查询

query("SystemWebView css:'*'") 

关于如何使用葫芦测试Web视图的更多细节见this wiki page

+0

这绝对解决了它。谢谢。但是,这是否意味着葫芦android的所有罐装步骤,例如assert_steps不工作?这是我原来的问题。 –

+0

我正在使用“然后我看到文本”步骤,最后调用 query(“* {text CONTAINS [c]''})) in wait_for_text方法。 从你说的话,这应该是: 查询( “SystemWebView CSS: '* {文本包含[C] ''}'”) 虽然我真的不明白这会被引用? –

+0

>罐装步骤。正确。他们不会工作。你应该写自己的步骤。 – jmoody