pywinauto中的自定义组合框识别

时间:2017-11-30 22:15:54

标签: python pywinauto

我有以下自定义组合框。

我尝试从字段中选择item或从itemcount获取ComboboxWrapper,但我猜pywinauto无法识别该对象。

我不能使用auto_id=CheckboxEdit因为它不是唯一的,我们在框架中有6个组合框。

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

有人可以检查一下吗?感谢名单。

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 个答案:

答案 0 :(得分:0)

如果每个自定义组合框包含1个标准组合框,则无需解决此问题:

  1. 使用found_index条件查找第一个组合框(例如)。
  2. 然后毫不含糊地找到后代组合框。
  3. 代码看起来应该如此:

    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()将返回已过滤的包装列表。然后很容易迭代它并找到目标。