pywinauto не видит объект ListView с помощью .print_control_identifiers () - PullRequest
1 голос
/ 24 октября 2019

Я оцениваю библиотеку pywinauto, чтобы иметь возможность автоматизировать приложения win для настольных компьютеров, и пока она выглядит очень многообещающе. Для оценки я использую простое приложение BookDB2 , которое я использовал много раз до этого (например, путем испытаний testComplete или UFT). В отличие от других объектов в этом приложении, с которыми я могу найти и работать, pywinauto по какой-то причине не может видеть свой объект ListView.

При использовании:

from pywinauto.application import Application
app = Application(backend='uia').start(r"C:\Program Files (x86)\BookDB2\BookDB2.exe")
app.top_window().print_control_identifiers()

python печатает все найденные объектывойти, однако объект ListView отсутствует. Я также пытался найти его напрямую, используя его свойства (с помощью шпионского инструмента AutoIt), но безуспешно. Обычно я думаю, что этот ListView настроен (нестандартно) - потому что это может быть хорошим объяснением, почему он не распознается. Но я знаю, что у UFT и testComplete не было ни малейшей проблемы с распознаванием и работой с ним. Чего мне не хватает?

Обновление: я пробовал SWAPY - своего рода инструмент поддержки pywinauto, способный шпионить за объектами и генерировать простой код.

Я обнаружил, что SWAPY действительно может видеть этот объект ListViewи он сгенерировал для меня операцию щелчка:

from pywinauto.application import Application

app = Application().Start(cmd_line=u'"C:\\Program Files (x86)\\BookDB2\\BookDB2.exe" ')
thunderrtformdc = app[u'BookDB Main Menu']
thunderrtformdc.Wait('ready')
listviewwndclass = thunderrtformdc[u'3']
listviewwndclass.Click()

app.Kill_()

При выполнении в PyCharm - появилась эта ошибка:

    raise MatchError(items = name_control_map.keys(), tofind = search_text)
pywinauto.findbestmatch.MatchError: Could not find '3' in 'dict_keys(['ThunderRT6Frame', 'FiltersThunderRT6Frame', 'Filters', 'ApplyButton', 'Button', 'Apply', 'ClearButton', 'Button0', 'Button1', 'Button2', 'Clear', 'Add BookEdit', 'Edit', 'Add BookEdit0', 'Add BookEdit1', 'Add BookEdit2', 'Edit0', 'Edit1', 'Edit2', 'ComboBox', 'ApplyComboBox', 'ComboBox0', 'ComboBox1', 'ComboBox2', 'Add BookComboBox', 'Button3', 'Copies', 'CopiesButton', 'Button4', 'Add Book', 'Add BookButton', 'BooksListView', 'ListView', 'BooksHeader', 'Header', 'Button5', 'BorrowersButton', 'Borrowers', 'Button6', 'CategoriesButton', 'Categories', 'Button7', 'Publishers', 'PublishersButton', 'Authors', 'Button8', 'AuthorsButton', 'Button9', 'BooksButton', 'Books'])'

Так что мне кажется, что SWAPY видит то, чего не может pywinauto.

1 Ответ

1 голос
/ 24 октября 2019

Хорошо ... так что это была моя ошибка. Это правильно:

app = Application().start(r"C:\Program Files (x86)\BookDB2\BookDB2.exe")

по какой-то причине я забыл backend = 'uia' в коде при запуске приложения, возможно, ошибка копирования и вставки. Все еще не уверен, почему другие объекты были видны, а этого (ListView) не было, но по крайней мере моя проблема решена.

...