是否有可能触及"隐形" calabash-android上的元素?

时间:2015-12-14 17:48:01

标签: android ruby automation calabash calabash-android

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

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'不成功:点击不能   完成!

我也试过这个解决方法:

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权限

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

感谢。

2 个答案:

答案 0 :(得分:0)

我唯一一次看到这是一个案例,你可以看到的元素被标记为看不见但可以看到,但是被另一个看不见的元素所覆盖,但没有被标记为不可见(I' m不确定这是如何实现的!)。与该覆盖元件的交互提供了解决方案。我用了

flash("*")

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

不能说这对你来说是否相同,但试一试。

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

adb shell input tap x y

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

答案 1 :(得分:-2)

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

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

每次都很完美。