Пользовательское поле со списком распознавания в Pywinauto

У меня ниже настраиваемое поле со списком.

я пытался выбрать item или получить itemcount от ComboboxWrapper с поля, но я думаю, pywinauto не может идентифицировать объект.

Я не могу использовать auto_id=CheckboxEdit как это не уникально, и у нас есть 6 combobox в кадре.

combobox = app.Dialog.child_window(auto_id="AgrementTypeFilter", control_type="ComboBox").wrapper_object()
comboitems = combobox.item_count()

Может кто-нибудь проверить это? Thanx.

Custom - ''    (L-1904, T328, R-1750, B374)
['', 'Custom', '0', '1', 'Custom0', 'Custom1']
child_window(auto_id="AgrementTypeFilter", control_type="Custom")
   | 
   | Static - 'Agreement Type'    (L-1900, T330, R-1754, B346)
   | ['Static', 'Agreement TypeStatic', 'Agreement Type']
   | child_window(title="Agreement Type", control_type="Text")
   | 
   | Custom - ''    (L-1900, T350, R-1754, B372)
   | ['2', 'Custom2', 'Agreement TypeCustom']
   | child_window(auto_id="Combo", control_type="Custom")
   |    | 
   |    | ComboBox - ''    (L-1900, T350, R-1754, B372)
   |    | ['ComboBox', '3', 'ComboBoxCCP']
   |    | child_window(auto_id="CheckBoxEdit", control_type="ComboBox")

1 ответ

Если каждое настраиваемое поле со списком содержит 1 стандартное поле со списком, есть несколько способов его решения:

  1. Найдите первое поле со списком (например), используя found_index критерий.
  2. Тогда найдите потомок со списком однозначно.

Код должен выглядеть так:

custom_combo = app.Dialog.child_window(auto_id="AgrementTypeFilter", control_type="Custom", found_index=0)
real_combobox = custom_combo.child_window(auto_id="CheckBoxEdit", control_type="ComboBox").wrapper_object()
real_combobox.item_count()

Другой способ - использовать имена с наилучшим соответствием, если они отличаются:

combobox = app.Dialog.ComboBoxCCP.wrapper_object()
combobox.item_count()

Наконец, вы также можете перечислить всех потомков этого типа управления:

comboboxes = app.Dialog.descendants(control_type="ComboBox")
target_combobox = [combo for combo in comboboxes if combo.item_count() == 12][0]

метод descendants() вернет отфильтрованный список упаковщиков. Тогда легко повторить и найти целевой.

Другие вопросы по тегам