Как исправить поле списка, возвращающее нулевое значение, используя оболочку UIA

#python-3.6 #ui-automation #pywinauto #listbox-control

#python-3.6 #пользовательский интерфейс-автоматизация #pywinauto #listbox-control

Вопрос:

Я хочу получить доступ к текстовым значениям из окна списка (pywinauto uia wrapper), которое вложено в представление СПИСКА внутри используемого приложения.

фрагмент кода:

 #upper window
up_window.ListView.wait('visible').Select('Enforcement').click_input(double=True)
time.sleep(5)
#after this enforcement window opens and i need to select the third tab which is performed below and its working fine.

enfwin = guilib.get_window('Enforcement', backend='uia') 
# guilib is user defined library which will retun the window handle

if enf_win.TabControl.get_selected_tab() != 2:        
    log.debug("Clicking on 'Targets' tab in Enforcement window")
    enf_win.TabControl`enter code here`.wait('enabled', timeout=60).select(2)

time.sleep(30)
list_rows = enf_win.ListBox.wait('ready', timeout=60).texts()

dcs_win.ListView.wait('visible').Select('Enforcement').click_input(double=True)
time.sleep(5)
enf_win = guilib.get_window('Enforcement', backend='uia')

if enf_win.TabControl.get_selected_tab() != 2:        
    log.debug("Clicking on 'Targets' tab in Enforcement window")
    enf_win.TabControl.wait('enabled', timeout=60).select(2)

time.sleep(30)
list_rows = enf_win.ListBox.wait('ready', timeout=60).texts()
  

Проблема здесь в том, что когда я вызываю эту функцию два раза из скрипта, 1-й запускает ее выборку list_rows, тогда как во втором запускает возвращаемый пробел. Похоже, что между ними потребовалось некоторое время. Но увеличение времени не помогает.

Пожалуйста, предложите, нужно ли мне вносить какие-либо изменения, чтобы каждый раз извлекать значение поля списка.

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

1. Какое приложение вы автоматизируете? WinForms?

2. Да, его WinForms

3. Еще раз привет. Мы пытались воспроизвести его в синтетическом случае (тестовое приложение), и все время он возвращает правильный список строк. Пожалуйста, убедитесь, что enf_win.ListBox.wait('ready', timeout=60).draw_outline() нарисована граница вокруг правильного поля списка. Теоретически возможно, что оно было сопоставлено с разными элементами в разные моменты.