2017-01-16 9 views
1

Я пытаюсь автоматизировать приложение для Windows, которое называется FacTel5.Windows GUI Automation на устаревшем приложении

я смог автоматизировать часть входа, но следующий вид пуля подобный список, чьи элементы управления не показ, ни на pywinauto control_identifiers или Windows, Осмотреть

from pywinauto.application import Application 
app = Application(backend="uia").start(r'C:\Factel5\Factel5.exe') 

controlAcceso = app.FacTel5['Control de acceso a FacTel5'].GroupBox 

user = controlAcceso.child_window(auto_id="4", control_type="Edit") 
user.type_keys("userid") 

password = controlAcceso.child_window(auto_id="5", control_type="Edit") 
password.type_keys("password") 

controlAcceso.child_window(title="Aceptar", auto_id="3", control_type="Button").click() 

pro = app.process 
winApp = Application().connect(process=app.process) 

App использования «uia» и winApp автоподключает использование бэкэнд win32.

Верхний код приземляется на меня в этом окне, если вам нужно/попробуйте код самостоятельно, учетные данные являются правильными (и они определены на program manual).

factelPic

Моя цель состоит в том, чтобы нажать на 1-й элемент списка.

inspectPic

Я очень признателен за любую помощь вы можете предоставить.

+0

Если Inspect.exe не может видеть элемент, pywinauto не может помочь, а также. Может помочь только некоторое обходное решение, например 'group_ctrl.type_keys ('{DOWN 2}')'. –

ответ

0

Эти элементы управления даже не реагируют на действия клавиатуры. Таким образом, единственным решением является щелчок по координатам! Но остановитесь! Это ненадежно! Если это абсолютные координаты экрана, да, это так. Но мы можем использовать относительные координаты (начало - верхний левый угол элемента управления). Он может быть надежным, если размеры регулятора фиксированы.

Этот код работает для меня на Win10 x64:

from pywinauto.application import Application 

app = Application(backend="uia").start(cmd_line=r"C:\Program Files (x86)\Factel5\Factel5.exe") 
# this main window spec should work even if the subtitle changes 
main_window = app.window(title_re=u'FacTel5 - Telef\u0443nica.*') 

controlAcceso = main_window['Control de acceso a FacTel5'].GroupBox 
user = controlAcceso.Edit1 
user.set_text("userid") 
password = controlAcceso.Edit2 
password.set_text("password") 
controlAcceso.child_window(title="Aceptar", control_type="Button").click() 

controlAcceso = main_window['Control de acceso a FacTel5'].child_window(title=u'\u0457Qu\u0439 desea hacer?') 
# controlAcceso = main_window['Control de acceso a FacTel5'][u'\u0457Qu\u0439 desea hacer?'] # TODO: need a bug fix 
rect = controlAcceso.rectangle() 
item1 = (rect.width()/2, int(float(rect.height() * 2.0)/11.5)) 
item2 = (rect.width()/2, int(float(rect.height() * 3.0)/11.5)) 
item3 = (rect.width()/2, int(float(rect.height() * 4.0)/11.5)) 
item4 = (rect.width()/2, int(float(rect.height() * 5.0)/11.5)) 
item5 = (rect.width()/2, int(float(rect.height() * 6.0)/11.5)) 

item6 = (rect.width()/2, int(float(rect.height() * 8.5)/11.5)) 
item7 = (rect.width()/2, int(float(rect.height() * 9.0)/11.5)) 
item8_exit = (rect.width()/2, int(float(rect.height() * 10.0)/11.5)) 

# uncomment move_mouse and comment click_input to see where the click happens 
# controlAcceso.move_mouse_input(coords=item1, absolute=False) 
controlAcceso.click_input(coords=item1, absolute=False) 

main_window.menu_select(u'Facturaciones->Gestión de facturaciones')