python pywinauto文件选择对话框

cwtwac6a  于 2023-04-22  发布在  Python
关注(0)|答案(2)|浏览(324)

我正在为我们经常使用的特定组件自动更新固件。我已经完成了GUI的自动化(并且正在工作),除了这个特定的屏幕。
我需要做的是,让程序自动导航到正确的文件夹(跨机器标准化),并选择正确的文件用于更新。
以下是我目前为止的代码:

from pywinauto.application import Application

app = Application(backend='win32').connect(title_re=".*EBDS*", found_index=0)

main_dlg = app.window(title_re=".*EBDS*", found_index=0)

main_dlg.child_window(title="Launch Control Panel", control_type="System.Windows.Forms.Button").click()

sub_dlg = app.window(title_re=".*Bill Acceptor*", found_index=0)

sub_dlg.child_window(title="Open", control_type="System.Windows.Forms.Button").click()

sub_dlg.child_window(title="Download", control_type="System.Windows.Forms.Button").click()

file_dlg = app.window(title_re=".*download*", found_index=0)

它有几个子窗口,点击后弹出,因此main_dlg,sub_dlg和file_dlg。

我已经告诉它选择下载按钮,它弹出“选择要下载的文件”窗口。
我现在需要做的是能够指定路径(在那里它说这台电脑),更改文件类型(目前说斌文件),并选择正确的文件。
我做了一个“打印控制标识符”,这里是该输出的txt文件的链接(它超过3 k行,所以我不想粘贴在这里)Control Identifiers .txt
然后,我正确地(手动地)完成了步骤,将其放到了需要的位置,并执行了另一个“打印控件标识符”。
假设我这样做是正确的,gui中的文件路径位置是:file_dlg.child_window(title="Select a file to download.", class_name='#32770').child_window(class_name="WorkerW").child_window(class_name="ReBarWindow32").child_window(class_name="Address Band Root").child_window(class_name="msctls_progress32").child_window(class_name="Breadcrumb Parent").child_window(title=".*Address:*", class_name="ToolbarWindow32")
问题是,我如何具体地与该对象交互?A .click()或.sendkeys()都出错。
如果你能弄清楚如何改变文件类型,那就再加分。
我愿意用一种更简单/不同的方式来做这件事,但是这必须可以部署到几百台屏幕大小不同的机器上,因此我不能使用pyautogui和像素计数。
有什么想法吗

roejwanj

roejwanj1#

您可以在编辑框中输入完整的文件路径,然后单击“打开”按钮。它应该看起来像这样:

file_dlg = app.window(title_re=".*Select a file to download*", found_index=0)
file_dlg.FileNameEdit.set_edit_text("full_path_to_file")
file_dlg.child_window(title="&Open", control_type="Button").click()

我假设你必须绕过.click_input().type_keys(...)的使用,因为它们需要活动的桌面,这很难在一个大的机器池中维护。

9ceoxa92

9ceoxa922#

你可以一步一步地访问它,当我们一次给予整个路径时,它正在操作特殊字符。所以我一个文件夹一个文件夹地访问,它工作了。下面是公共使用的操作行:

dlg = app['Open Project']
dlg.child_window(class_name="ComboBoxEx32").type_keys('F:\*')
dlg.child_window(title="&Open", class_name="Button").click()
dlg.child_window(class_name="ComboBoxEx32").type_keys('appl_repo\*')
dlg.child_window(title="&Open", class_name="Button").click()
dlg.child_window(class_name="ComboBoxEx32").type_keys('myfile\*')
dlg.child_window(title="&Open", class_name="Button").click()
dlg.child_window(class_name="ComboBoxEx32").type_keys('myfile.txt')

相关问题