我做了自动化testing,并得到一个文件对话框。 我想从Windows打开文件对话框中select一个文件与Python或selenium。
注意:该对话框由其他程序给出。 我不想用Tkinter创build它。
该窗口如下所示:
。
这个怎么做?
你可以使用ctypes库。
考虑这个代码:
import ctypes EnumWindows = ctypes.windll.user32.EnumWindows EnumWindowsProc = ctypes.WINFUNCTYPE(ctypes.c_bool, ctypes.POINTER(ctypes.c_int), ctypes.POINTER(ctypes.c_int)) GetWindowText = ctypes.windll.user32.GetWindowTextW GetWindowTextLength = ctypes.windll.user32.GetWindowTextLengthW SendMessage = ctypes.windll.user32.SendMessageW IsWindowVisible = ctypes.windll.user32.IsWindowVisible def foreach_window(hwnd, lParam): if IsWindowVisible(hwnd): length = GetWindowTextLength(hwnd) buff = ctypes.create_unicode_buffer(length + 1) GetWindowText(hwnd, buff, length + 1) if(buff.value == "Choose File to Upload"): #This is the window label SendMessage(hwnd, 0x0100, 0x09, 0x00000001 ) return True EnumWindows(EnumWindowsProc(foreach_window), 0)
你循环每一个打开的窗口,并发送一个关键击中你选择的一个。
SendMessage函数获得4个参数:窗口hendler( hwnd
),要发送的物理键 – WM_KEYDOWN (0x0100), tab
的虚拟键代码 ( 0x09
)和repeat count, scan code, extended-key flag, context code, previous key-state flag, and transition-state flag
第四个参数中的repeat count, scan code, extended-key flag, context code, previous key-state flag, and transition-state flag
。
您也可以发送密钥,关键字,字符,返回等…使用文档的帮助。
我用它作为参考: Win32 Python:获取所有窗口标题
祝你好运!
考虑使用pywinauto包。 它有一个非常自然的语法来自动化任何GUI程序。
代码示例,在记事本中打开文件。 请注意,语法是依赖于语言环境的(它在GUI程序中使用可见的窗口标题/控件标签):
from pywinauto import application app = application.Application().start_('notepad.exe') app.Notepad.MenuSelect('File->Open') # app.[window title].[control name]... app.Open.Edit.SetText('filename.txt') app.Open.Open.Click()