2017-06-30 97 views
0

我正在使用pywinauto在GUI應用程序上自動執行一些測試。有一個列表框,我需要檢查一些數據。該ListBoxWrapper類有這些方法:Pywinauto從ListBoxWrapper訪問方法

ListBoxWrapper.GetItemFocus 
ListBoxWrapper.ItemCount 
ListBoxWrapper.ItemData 
ListBoxWrapper.ItemTexts 

https://pywinauto.readthedocs.io/en/latest/code/pywinauto.controls.win32_controls.html#pywinauto.controls.win32_controls.ListBoxWrapper

如何訪問這些方法?

這裏是我到現在爲止: - 我創建了一個應用實例,並用它來啓動程序 - 我有一個WindowSpecification實例列表框

listbox = programwindowspec.child_window(title="abcdefg", control_type="ListItem") 

從這裏我怎麼弄的ListBoxWrapper類的方法?

PS:我不是在Python中的OOP側的專家,所以請大家多多包涵

編輯:我用了。孩子()方法來獲取窗口上的所有控件包裝,然後過濾從孩子的列表框中刪除。

window = app.window(handle=w_handle) 
for child in window.children(): 
    if 'List' in child._control_types: 
     print(child) 
     text = child.texts() 
     print(text) 

而這符合我的目的。但我認爲_control_types是一個'私人'類屬性。可以直接從課外訪問嗎?

回答

0

看起來您使用的是backend="uia",但是您提供的文檔鏈接適用於backend="win32"。這些後端有兩種不同的包裝。這是correct docs for UIA List* related wrappers

child_window(...)中使用control_type搜索條件是正確的。對於WindowSpecification您可以創建一個ListItemWrapper這樣:

list_item = programwindowspec.child_window(title="abcdefg", control_type="ListItem") 
item_wrapper = list_item.wrapper_object() 

# list all available attributes for a list item wrapper 
print(dir(item_wrapper)) 

要創建ListViewWrapper(爲UIA),你需要在WindowSpecification使用control_type="List"control_type="DataGrid"(我們使用相同的包裝,這些2種控制類型)。