Я обновился до 0.6.6 pywinauto после просмотра замечаний к выпуску.Я работаю над приложением .net, которое имеет элемент управления datagridview, и пытаюсь получить контроль над ним.Идентификатор автоматизации является динамическим (каждый раз, когда приложение запускается).Я не могу получить контроль над сеткой данных и всегда получаю pywinauto.findwindows.ElementNotFoundError.Я не уверен, должен ли control_type быть таблицей или сеткой данных или сеткой данных для дальнейшей попытки.Некоторые вещи, которые я пробовал
x=app.window(auto_id='FrmAllTimeSaleFilter').child_window(control_type="Table", class_name="WindowsForms10.Window.8.app.0.141b42a_r9_ad1").ItemCount()
x=app.window(auto_id='FrmAllTimeSaleFilter').child_window(auto_id="1314290", class_name="WindowsForms10.Window.8.app.0.141b42a_r9_ad1").ItemCount()
x=app.window(auto_id='FrmAllTimeSaleFilter').child_window(control_type="Table").PrintControlIdentifiers()
x=app.window(auto_id='FrmAllTimeSaleFilter').child_window(control_type="DataItem").PrintControlIdentifiers()
Также не нашли никакой документации по https://pywinauto.readthedocs.io/en/latest/controls_overview.html и доступным для этого методам.
app = Application(backend="uia").connect(path = confnestTraderExePath)
print("connected to application")
app.window_(title_re = "Time.*").print_control_identifiers()
sys.exit()
Вывод
connected to application
Traceback (most recent call last):
File "C:\python35\lib\site-packages\pywinauto\application.py", line 256, in __resolve_control
criteria)
File "C:\python35\lib\site-packages\pywinauto\timings.py", line 458, in wait_until_passes
raise err
pywinauto.timings.TimeoutError
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "ts.py", line 758, in <module>
app.window_(title_re = "Time.*").print_control_identifiers()
File "C:\python35\lib\site-packages\pywinauto\application.py", line 595, in print_control_identifiers
this_ctrl = self.__resolve_control(self.criteria)[-1]
File "C:\python35\lib\site-packages\pywinauto\application.py", line 259, in __resolve_control
raise e.original_exception
File "C:\python35\lib\site-packages\pywinauto\timings.py", line 436, in wait_until_passes
func_val = func(*args, **kwargs)
File "C:\python35\lib\site-packages\pywinauto\application.py", line 201, in __get_ctrl
dialog = self.backend.generic_wrapper_class(findwindows.find_element(**criteria[0]))
File "C:\python35\lib\site-packages\pywinauto\findwindows.py", line 87, in find_element
raise ElementNotFoundError(kwargs)
pywinauto.findwindows.ElementNotFoundError: {'backend': 'uia', 'title_re': 'Time.*', 'process': 5712}
Обновление 2: используя приведенный ниже код, я могу получить доступ к представлению данных через backend = "uia".
tsWindow=app.window_(title_re = "MYAPP.*").child_window(title_re=".*Sales Filter")
count=tsWindow.DataGridView.item_count()
for i in range(0,count-1):
print(tsWindow.DataGridView.cell(i,0))
НоЯ получаю следующий вывод.Я не получаю данные в сетке, но вместо этого он возвращает что-то вроде этого.Как мне это обработать?
connected to application
uia_controls.ListItemWrapper - 'Time Row 0', DataItem
uia_controls.ListItemWrapper - 'Time Row 1', DataItem
uia_controls.ListItemWrapper - 'Time Row 2', DataItem
uia_controls.ListItemWrapper - 'Time Row 3', DataItem