【问题标题】:Is it possible to touch an "invisible" element on calabash-android?是否可以触摸 calabash-android 上的“隐形”元素?
【发布时间】:2016-03-20 07:28:00
【问题描述】:

我无法触摸我的应用程序上的元素。我只能在执行命令时查询元素

query("all * text:'myText'")

返回元素不可见(在屏幕上完全可见)的结果。

"class" => "android.support.v7.widget.AppCompatTextView",
                   "tag" => nil,
           "description" => "android.support.v7.widget.AppCompatTextView{28d7250d V.ED.... ........ 0,0-145,49 #7f100141 app:id/textLabel}",
                    "id" => "textLabel",
                  "text" => "myText",
               "visible" => false,
                  "rect" => {
          "height" => 49,
           "width" => 145,
               "y" => 0,
               "x" => 0,
        "center_x" => 72,
        "center_y" => 24
    },
               "enabled" => true,
    "contentDescription" => nil

如果我尝试这样做:

touch(query("all * text:'myText'"))

我收到以下错误:

RuntimeError: Action 'touch_coordinate' unsuccessful: Click can not be 完成!

我也试过这个解决方法:

b= query("all * text:'myText'")

touch(nil,
:offset=>{:x=>b[0]['rect']['center_x'],:y=>b[0]['rect']['center_y']})

RuntimeError:无法执行手势。 java.lang.SecurityException: 注入到另一个应用程序需要 INJECT_EVENTS 权限

有没有办法触摸这个元素?

谢谢。

【问题讨论】:

  • 你能分享你的用户界面吗?

标签: android ruby automation calabash calabash-android


【解决方案1】:

我唯一见过的情况是,您可以看到的元素被标记为不可见但可以看到,但被另一个不可见但未标记为不可见的元素覆盖(我不确定这是如何实现的!)。与该覆盖元件交互提供了解决方案。我用过

flash("*")

在控制台中循环遍历所有元素并计算出哪些是潜在候选者,然后尝试依次与它们交互。

不能说这对你来说是否一样,但请尝试一下。

关于您的错误 - 注入另一个应用程序需要 INJECT_EVENTS 权限,这可能表明坐标的行为与您预期的不一样,这意味着您错过了您的应用程序。您可以获取坐标并尝试使用 adb 来发送触摸事件

adb shell input tap x y

在控制台中尝试它可能是解决这个问题的最简单方法。

【讨论】:

    【解决方案2】:

    您是否尝试过点击带有 ID 而不是 TEXT 的按钮?我有一个需要长时间按下的按钮并给出了这个:

    long_press_when_element_exists("* id:'#hiddenButtonID'")
    

    每次都能完美运行。

    【讨论】:

      猜你喜欢
      • 2016-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-22
      • 1970-01-01
      相关资源
      最近更新 更多