我无法触摸应用中的元素。我只能在执行命令时查询元素
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权限
有没有办法触摸这个元素?
感谢。
答案 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'")
每次都很完美。