AndroidViewClient - не может получить координаты XY ()

Я запускаю AndroidViewClient и могу вывести полную иерархию, но что-то не получается, когда я пытаюсь получитьXY() или touch(). Даже решение из Получить текущее имя сфокусированного окна с помощью AndroidViewClient дает мне ошибка.

  kwargs1 = {'verbose': True, 'ignoresecuredevice': True}
  kwargs2 = {'startviewserver': True, 'forceviewserveruse': True,
             'autodump': False, 'ignoreuiautomatorkilled': True}
  device, serialno = ViewClient.connectToDeviceOrExit(**kwargs1)
  vc = ViewClient(device, serialno, **kwargs2)
  view = vc.dump(window='-1')
  widget = vc.findViewByIdOrRaise("id/no_id/5")
  widget.useUiAutomator = False
  print widget
  # Up until here runs no problem.
  print widget.getXY() # fails.
  widget.touch() # also fails.

Моя трассировка стека выглядит примерно так:

напечатать виджет.getXY()

Файл "/usr/local/lib/python2.7/dist-packages/androidviewclient-11.5.3-py2.7.egg/com/dtmilano/android/viewclient.py", строка 680, в getXY (wvx, wvy) = self.__dumpWindowsInformation(отладка=отладка)

Файл "/usr/local/lib/python2.7/dist-packages/androidviewclient-11.5.3-py2.7.egg/com/dtmilano/android/viewclient.py", строка 798, в __dumpWindowsInformation

dww = self.device.shell('dumpsys window windows')

Файл "/usr/local/lib/python2.7/dist-packages/androidviewclient-11.5.3-py2.7.egg/com/dtmilano/android/adb/adbclient.py", строка 377, в оболочке

self.__send('shell:%s' % cmd, checkok=True, reconnect=False)

Файл "/usr/local/lib/python2.7/dist-packages/androidviewclient-11.5.3-py2.7.egg/com/dtmilano/android/adb/adbclient.py", строка 243, в __send

self.__checkOk()

Файл "/usr/local/lib/python2.7/dist-packages/androidviewclient-11.5.3-py2.7.egg/com/dtmilano/android/adb/adbclient.py", строка 286, в __checkOk

raise RuntimeError("ERROR: %s %s" % (repr(recv), error))

Ошибка выполнения: ОШИБКА: ''

Есть предположения?


person leeeroy jenkins    schedule 04.05.2016    source источник
comment
Что за устройство и его уровень API?   -  person Diego Torres Milano    schedule 05.05.2016
comment
Эмулятор Nexus 5X, уровень API 23   -  person leeeroy jenkins    schedule 05.05.2016
comment
Почему вы заставляете ViewServer использовать ('forceviewserveruse': True)? API 23 должен использовать uiautomator.   -  person Diego Torres Milano    schedule 05.05.2016
comment
Ааа, потому что в другом месте программы я также получаю имя окна и получаю сообщение об ошибке: Исключение: еще не реализовано: список окон с помощью UiAutomator. Но я могу обойти это :)   -  person leeeroy jenkins    schedule 05.05.2016
comment
@DiegoTorresMilano Не могли бы вы объяснить, почему это помечено как android-uiautomator? Этот вопрос очень специфичен для AndroidViewClient и не кажется актуальным для пользователей библиотеки UI Automator (даже несмотря на то, что AndroidViewClient построен поверх).   -  person Allen Hair    schedule 06.05.2016
comment
@AllenHair это связано с UiAutomator, потому что это проблема, которая возникает только в том случае, если UiAutomator не используется в качестве серверной части.   -  person Diego Torres Milano    schedule 06.05.2016


Ответы (1)


widget = vc.findViewByIdOrRaise("id/no_id/5")
widget.useUiAutomator = False
widget.getXY() 
x = (str)widget.windows[widget.currentFocus] 
print x

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

h = device._AdbClient__getDisplayHeight("")
w = device._AdbClient__getDisplayWidth("")
print (str)(h)
print (str)(w)
person Arun Sai    schedule 15.06.2016