Как выбрать пункт меню в контекстном меню с помощью pywinauto? - PullRequest
1 голос
/ 18 октября 2019

Я использую pbixrefresher для автоматизации обновления отчета PBI, который работает правильно, однако мне также нужно сохранить таблицу данных в виде файла csv, скопировав таблицу в excel и затем сохранив ее как csv, поскольку таблица предназначена длябольшой для экспорта в формате csv в PBI (около 60 тыс. строк). Я могу заставить pywinauto перейти к представлению данных в PBI, и благодаря некоторой помощи здесь появилось выпадающее меню (контекстное меню или всплывающее меню). Я могу открыть меню до нужной опции, но ничего не происходит, когда я использую click_input ('left'). Меню продолжает отображаться, и никаких действий не предпринимается. Код как показано ниже:

import time
import os
from pywinauto.application import Application
from pywinauto import timings


timings.after_clickinput_wait = 1
WORKBOOK = "C:/BBSDMthly/DA_AgentList.pbix"
PROCNAME = "PBIDesktop.exe"
os.system('start "" "' + WORKBOOK + '"')
app = Application(backend = 'uia').connect(path = PROCNAME)
win = app.window(title = 'DA_AgentList - Power BI Desktop')
time.sleep(5)
win.wait("enabled", timeout = 300)
win.Save.wait("enabled", timeout = 300)
win.set_focus()
win.Data.click_input()
win.Save.wait("enabled", timeout = 300)
win.wait("enabled", timeout = 300)
win.click_input(button = 'right')
win.Save.wait("enabled", timeout = 300)
win.wait("enabled", timeout = 300)
win.set_focus()
win.type_keys("{VK_TAB 7}")
win.click_input(button='left')

Я искал другие запросы по этому вопросу и нашел несколько, но ни один из опробованных мной вариантов не работал. Например, я попытался:

app.PopupMenu.wait('visible', timeout=15).menu().get_menu_path('Copy table')[0].click_input()

, что вернуло:

`Файл" C: \ Program Files \ Anaconda3 \ lib \ site-packages \ pywinauto \ timings.py ", строка 375, в wait_until на повышение err

TimeoutError: timedEr`

Я также попытался:

app.ContextMenu.child_window(title="Copy table", control_type="MenuItem").click_input()

, который возвратилMatchError:

MatchError: Could not find 'ContextMenu' in 'dict_keys(['DA_AgentList - Power BI DesktopDialog', 'Dialog', 'DA_AgentList - Power BI Desktop'])'

Я также пытался: app.top_window().menu.item_by_path('Copy table')[0].click_input()

, который возвратил MatchError: Could not find 'Copy table' in 'dict_keys(['System'])'

Я пытался использовать print_control_identifiers для получения дополнительной информациив выпадающем меню, но ничего, что возвращается, кажется, не имеет к этому отношения. К сожалению, у меня нет inspect.exe, поэтому я не могу использовать его для получения дополнительной информации.

Может кто-нибудь помочь мне в этом, пожалуйста?

1 Ответ

1 голос
/ 24 октября 2019

Кажется, я разобрался, как выбрать таблицу копирования из выпадающего меню. Я нашел inspect.exe в GitHub как отдельную программу, и мне удалось получить его без каких-либо проблем с правами администратора. Используя inspect.exe, я получил координаты для таблицы копирования и использовал приведенный ниже код, чтобы нажать на кнопку:

win.click_input(coords=(754,306))
win.Save.wait("enabled", timeout = 300)
win.wait("enabled", timeout = 300)
win.set_focus()

Это сработало несколько раз, поэтому, похоже, решил мою проблему. Теперь все, что мне нужно сделать, это решить, как вставить данные в Excel!

...