【问题标题】:Unexpected result from Calabash using query commandCalabash 使用查询命令的意外结果
【发布时间】:2016-04-03 18:37:59
【问题描述】:

我刚刚开始使用 Calabash,我正在尝试测试一个在 Genymotion 下运行的 Android 应用。

当我运行简单测试以启动应用程序并查看初始屏幕时,我可以在 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}}]

我做错了什么?

【问题讨论】:

    标签: android genymotion calabash calabash-android


    【解决方案1】:

    您看到的是由 Cordova 生成的 Android 应用的布局。 Cordova 在 SystemWebView 中显示您的应用程序中的所有内容,因此您希望在其中查找您的 HTML。您可以使用此查询在 web 视图中查看整个页面的 html

    query("SystemWebView css:'*'")
    

    有关如何使用 Calabash 测试 Web 视图的更多详细信息,请参阅 this wiki page

    【讨论】:

    • 这绝对解决了它。谢谢。但这是否意味着 calabash-android 的所有固定步骤(例如 assert_steps)都不起作用?那是我最初的问题。
    • 我正在使用“然后我看到文本”步骤,最终在 wait_for_text 方法中调用 query("* {text CONTAINS[c] ''}")。根据您所说,这应该是: query("SystemWebView css:'* {text CONTAINS[c] ''}'") 虽然我真的不明白如何引用它?
    • > 固定步骤。正确的。他们不会工作。您应该编写自己的步骤。
    • 因此,如果我自己编写查询以在屏幕上搜索单词 Schools:query("SystemWebView css:'* {text CONTAINS[c] \"Schools\"}'") 我得到 SystemWebView css:'* {text CONTAINS[c] \'Schools\'}', query failed because: java.util.concurrent.ExecutionException: java.lang.NullPointerException 我不知道为什么会这样,因为我之前得到“无效查询”现在不是这种情况?
    • query("SystemWebView css:'*' {textContent CONTAINS[c] \"Schools\"}")
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    • 2019-05-04
    • 1970-01-01
    • 2023-03-05
    • 2010-11-25
    • 1970-01-01
    相关资源
    最近更新 更多