pywinauto和listitem选择

时间:2016-12-13 02:17:26

标签: automation pywinauto

我正在玩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'标签不可靠,因为它经常变化。

例如:

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()

0 个答案:

没有答案