Python pywinauto中的自定义组合框识别

Python pywinauto中的自定义组合框识别,python,pywinauto,Python,Pywinauto,我有下面的自定义组合框 我试图从字段中选择item或从ComboboxWrapper获取itemcount,但我猜pywinauto无法识别对象 我不能使用auto\u id=CheckboxEdit,因为它不是唯一的,并且我们在框架中有6个组合框 combobox = app.Dialog.child_window(auto_id="AgrementTypeFilter", control_type="ComboBox").wrapper_object() comboitems = combo

我有下面的自定义组合框

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

我不能使用
auto\u 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")

如果每个自定义组合框包含一个标准组合框,则需要解决的问题很少:

  • 使用
    found\u index
    标准查找第一个组合框(例如)
  • 然后毫不含糊地找到子体组合框
  • 代码应该是这样的:

    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]
    

    方法
    subjects()
    将返回经过筛选的包装器列表。然后很容易迭代它并找到目标代码。

    第一个代码可以工作,但它只返回1个项目计数,如下所示。该组合框中有12项。['','CCP']同样对于这段代码,我们可以为对象“ComboBoxCCP”迭代这段代码吗。如果是这样的话,我们可以:combobox=app.Dialog.ComboBoxCCP.wrapper\u object()combobox.item\u count()通常可以为以下最佳匹配名称添加数字:
    ComboBoxCCP1
    ComboBoxCCP2
    等。但通常它只适用于控件类型,如
    ComboBox1
    ComboBox2
    等。而且
    ComboBox0
    ComboBox1
    将匹配相同的第一个组合框(历史设计).在最后一段代码中添加了12项简单迭代+筛选。我尝试了上面的简单迭代代码,但它返回的项超出了范围,因为它只有1条记录。net属性检索控件的正确内容。如何在代码中使用“Itemssource”。对于组合框,我可以“获取属性”,也可以使用“遗留属性”,但找不到该属性。