我正在玩pywinauto并使用它来自动化Windows 7上的Skype功能。
我无法准确地从联系人列表中选择人员。
打开Skype并识别我使用的主窗口的一般代码如下:
from pywinauto.application import Application
app = Application(backend= "uia")
app.start('skype.exe')
app.connect(process =1636) # I have this just incase Skype is already open, slightly hacky I suppose
app.SkypeUsername.draw_outline()
dlg =app.SkypeUsername
contacts =dlg.Listbox # My contacts seem to be under the header "Listbox" when I use point_control identifiers, so I assigned it to contacts for easy reference.
然后我使用point_control_identifiers查看我的联系人的存储方式。
contacts.print_control_identifiers()
Control Identifiers:
ListBox - 'Contacts' (L-32000, T-31705, R-30080, B-31039)
[u'ContactsListBox', u'Contacts', u'ListBox']
child_window(title="Contacts", control_type="List")
|
| Custom - 'Favorites' (L-32000, T-31825, R-30095, B-31765)
| [u'FavoritesCustom', 'Custom', u'Favorites']
| child_window(title="Favorites", control_type="Custom")
|
| ListItem - 'sayaku o, sayaku353143, Away, Favorite' (L-32000, T-31705, R-30095, B-31690)
| [u'sayaku o, sayaku353143, Away, FavoriteListItem', u'ListItem', u'ListItem0', u'ListItem1', u'sayaku o, sayaku353143, Away, Favorite']
| child_window(title="sayaku o, sayaku353143, Away, Favorite", control_type="ListItem")
|
| ListItem - 'bobby jackson, bjackson01, Offline, Favorite' (L-32000, T-31690, R-30095, B-31615)
| [u'ListItem2', u'bobby jackson, bjackson01, Offline, FavoriteListItem', u'bobby jackson, bjackson01, Offline, Favorite']
| child_window(title="bobby jackson, bjackson01, Offline, Favorite", control_type="ListItem")
|
| ListItem - 'kay_katayama, kay_katayama, Away, Favorite' (L-32000, T-31615, R-30095, B-31540)
| [u'ListItem3', u'kay_katayama, kay_katayama, Away, Favorite', u'kay_katayama, kay_katayama, Away, FavoriteListItem']
| child_window(title="kay_katayama, kay_katayama, Away, Favorite", control_ty
要选择不同的联系人,我正在创建这样的代码:
sayaku = contacts.ListItem.wrapper_object()
Bobby = contacts.ListItem2.wrapper_object()
我注意到的问题是,如果我在联系人列表上向下滚动一下(因为我在向下滚动时,因为" Bobby"在联系人下面不再可见),ListItem2将与Bobby以外的人联系。
所以当我使用以下代码时,
Bobby.double_click_input()
app.Bobby.wait('visible')
Bobby_box = app.Bobby
Bobby_box.call.click()
点击其他联系人,打开其他联系人的聊天窗口。
如果可以通过使用他们的姓名而不是标签' Listitem2'来选择联系人,则可以避免这种情况。但是,给出的标签很长并且有空格,所以我不知道如何通过较长的标签进行选择,例如'bobby jackson, bjackson01, Offline, FavoriteListItem'
例如:
ListItem - 'bobby jackson, bjackson01, Offline' (L0, T0, R0, B0)
| [u'bobby jackson, jacksona01, Offline', u'ListItem18', u'bobbyjackson, bjackson01, OfflineListItem']
| child_window(title="jackson, bjackson01, Offline", control_type="ListItem")
现在是Listitem18
。
我尝试按bobby_jackson
调用列表项,但窗口未被识别。如何在不诉诸'bobby jackson, jacksona01, Offline'
的情况下致电Listitem
?
感谢。
编辑:2
通过以下代码和类似的变体尝试了以下建议,但仍然出现错误:
x = contacts.child_window(title="sayaku o, sayaku353143, Away", control_type="ListItem")
x.wrapper_object().click()
ElementNotFoundError:{' control_type':' ListItem',' title':' sayaku o,sayaku353143,Away',&#39 ; top_level_only':False,' parent':,' backend':u' uia'}
contacts.print_control_identifiers()
仍打印所有联系人,以便正确分配联系人。
EDIT 3(2016年12月19日):
我也尝试了以下代码,但仍然无法选择窗口:
sayaku =contacts.child_window(title_re='sayaku.*', control_type='ListItem').wrapper_object()