Pywinauto — как получить свойство ‘value’ элемента (индикатор выполнения), которое будет динамически изменяться

#python #wpf #automation #pywinauto #inspect

#python #wpf #автоматизация #pywinauto #Осмотр

Вопрос:

Пытаюсь автоматизировать серверную часть приложения wpf = uia, для индикатора выполнения мне нужно получить динамически изменяющийся атрибут «value», но когда я использовал window_text(), я получаю «, затем я попытался передать управление в этой оболочке, pywinauto.application.controls.uia_controls.UIAElementInfo(ctrl).name получив эту ошибку TypeError("UIAElementInfo object can be initialized " "with integer or IUIAutomationElement instance only! ) и, наконец, попытался передать элемент в следующий класс Progresswrapper pywinauto.controls.common_controls.ProgressWrapper(element_info).get_position() я получаю, что element_info должен быть hwndwrapper.

это мой код app.py

  1. запустите app.exe

     app = pywinauto.application.Application(backend='uia').start('app.exe')
      
  2. идентификация окна

     wind = app.window(auto_id="someid")
      
  3. поиск элемента управления индикатором выполнения

     ctrl = wind.window(auto_id='progress') 
      
  4. получение текста индикатора выполнения элемента управления

     ctrl.window_text()
      

Ответ №1:

Метод ctrl.get_value() — это то, что вам нужно. Вам не следует пытаться создавать оболочки вручную, если вы не знаете, что делаете.

Комментарии:

1. Что, если это не сработает? Для ListItemWrapper я получаю AttributeError: 'ListItemWrapper' object has no attribute 'value' . Однако, Inspect.exe показывает правильное значение.

2. Метод .get_value() и свойство Value имеют разные имена. Пожалуйста, отредактируйте свой вопрос, добавив больше кода, который вы пытаетесь. Имена методов Pywinauto не обязательно должны быть такими же, как в Inspect.exe .

3. Также, пожалуйста, переключите Inspect.exe в режим автоматизации пользовательского интерфейса из MSAA.

4. Хм, интересно. Да, get_value работает нормально, спасибо!