Как получить доступ к сетке данных в приложении pywinauto для .net? - PullRequest
0 голосов
/ 19 марта 2019

Я обновился до 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 и доступным для этого методам.

inspect snapshot of the control attached

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

1 Ответ

1 голос
/ 21 апреля 2019

как только вы получили список listitemwrapper, вы можете получить доступ к его значению

 listItemWrapper.legacy_proprites()['Value']

, которое должно возвращать значение этого элемента.

...