python pywinauto 文件选择对话框

问题描述 投票:0回答:2

我正在为我们经常使用的特定组件自动更新固件。除了这个特定的屏幕,我已经完成了 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。

我已经告诉它选择下载按钮了,它会弹出“选择要下载的文件”窗口

我现在需要做的是能够指定路径(它说的是 This PC),更改文件类型(当前说的是 Bin 文件),然后选择正确的文件。

我做了一个“打印控件标识符”,这里是该输出的 txt 文件的链接(它超过 3k 行,所以我不想在这里粘贴)Control Identifiers .txt

然后我所做的是我正确地(手动)完成了将它放在需要的位置的步骤,并做了另一个“打印控制标识符”。同样,这超过 3k 行,所以这里有一个 Link 到那个输出。

假设我做对了,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")

问题是,我具体如何与那个对象交互? .click() 或 .sendkeys() 都出错了。

如果您能弄清楚如何更改文件类型,则可加分。

我愿意接受一种更简单/不同的方式来做这件事,但是这必须部署到几百台屏幕尺寸不同的机器上,因此我不能使用 pyautogui 和像素数。

有什么想法吗?

python-3.x openfiledialog pywinauto
2个回答
3
投票

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

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(...)
的使用,因为它们需要活动桌面,这很难在大量机器上维护。


0
投票

你可以一步一步地访问它,当我们一次给出整个路径时它正在操纵特殊字符。所以我逐个文件夹访问它并且它有效。下面是为公共使用而操纵的行:

dlg = app['打开项目']

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')

© www.soinside.com 2019 - 2024. All rights reserved.