2015-12-14 3 views
0

Я не могу коснуться элемента в своем приложении. Я могу запросить только элемент при выполнении командыМожно ли коснуться «невидимого» элемента на калабаш-андроиде?

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 completed!

Я также попытался это временное решение:

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

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

RuntimeError: Failed to perform gesture. java.lang.SecurityException: Injecting to another application requires INJECT_EVENTS permission

Есть ли способ коснуться этого элемента?

Спасибо.

+0

Вы можете поделиться своим интерфейсом? – Aravin

ответ

0

Единственный раз, когда я видел это, был случай, когда элемент, который вы могли видеть, был отмечен как невидимый, но мог быть замечен, но был покрыт другим элементом, который не был виден, но не был отмечен как невидимый (я не конечно, как это было достигнуто!). Взаимодействие с этим покрывающим элементом обеспечило решение. Я использовал

flash("*") 

в консоли, чтобы перебрать все элементы и подсчитывают, какие из них являются потенциальными кандидатами, а затем пытались взаимодействовать с ними, в свою очередь.

Нельзя сказать, будет ли это для вас одинаково, но попробуйте.

Что касается вашей ошибки - для ввода в другое приложение требуется разрешение INJECT_EVENTS, это может указывать на то, что координаты не ведут себя так, как вы ожидали, что означает, что вы пропустили приложение. Вы можете получить координаты и попытаться использовать ADB, чтобы отправить сенсорное событие вместо

adb shell input tap x y 

Попытки его в консоли, вероятно, будут самым простым способом, чтобы играть вокруг с этим.

-2

Вы пытались нажать кнопку с ID, а не TEXT? У меня есть кнопка, которая должна быть нажата надолго и дала следующее:

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

и работал отлично каждый раз.