python pywinauto文件选择对话框

问题描述

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

enter image description here

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

我现在需要做的是能够指定路径(它表示本电脑的位置),更改文件类型(当前表示Bin文件)并选择正确的文件

我已经完成了“打印控件标识符”,这是该输出的txt文件链接(超过3k行,所以我不想将其粘贴到此处)Control Identifiers .txt

然后我要做的是正确(手动)完成了将其放置到需要的位置的步骤,并做了另一个“打印控件标识符”。同样,这条线的长度超过3k,所以这里是Link to that output.

假设我正在正确执行此操作,则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和像素数。

有什么想法吗?

解决方法

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

'Hello world'

我假设您必须绕过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()的使用,因为它们需要活动的桌面,而这在大型计算机池上很难维护。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...