2016-05-04 13 views
9

Ich mache automatisierte Tests und bekomme einen Dateidialog. Ich möchte eine Datei aus dem Windows öffnen Dateidialog mit Python oder Selen auswählen.Datei aus dem Windows-Dateidialog automatisch mit Python öffnen

HINWEIS: Der Dialog wird von einem anderen Programm erstellt. Ich möchte es nicht mit Tkinter erstellen.

Das Fenster sieht so aus:

THIS.

Wie geht das?

+0

Mögliches Duplikat [eine Datei in Python mit einfachen Dialog Wahl] (http://stackoverflow.com/questions/3579568/Wählen einer Datei-in-Python-mit-einfachen-Dialog) –

+1

@Alvin Bitte beachten Sie den Hinweis. – kame

+0

Selen wird dir nicht helfen. Haben Sie [tag: AutoIt], [tag: Sikuli], [tag: RobotFramework] betrachtet. – SiKing

Antwort

5

Sie können Ctypes-Bibliothek verwenden.

diesen Code vor:

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) 

Sie Schleife an jedem offenen Fenster, und Sie einen Tastendruck auf der einen schicken Sie wählen.

Die SendMessage Funktion bekommt 4 params: Das Fenster Hendler (hwnd), The phisical Schlüssel zu senden - WM_KEYDOWN (0x0100) Die virtual-key code von tab (0x09) und die repeat count, scan code, extended-key flag, context code, previous key-state flag, and transition-state flag im 4. Argumente.

Sie können auch Schlüssel hoch, Taste unten, Zeichen, Rückgaben und etc ... Verwenden Sie die Dokumentation für Hilfe.

ich verwendet, um dieses als Referenz: Win32 Python: Getting all window titles

Viel Glück!

+0

Können Sie auch beschreiben, wie Sie auf die erste Datei klicken? Wie bekommst du den Elementnamen? Vielen Dank! – kame

5

Verwenden Sie das Paket pywinauto. Es hat eine sehr natürliche Syntax, um alle GUI-Programme zu automatisieren.

enter image description here

-Code beispielsweise eine Datei in Notepad zu öffnen. Beachten Sie, dass die Syntax ist locale abhängig (es verwendet die sichtbaren Fenstertitel/Steueretikett in Ihrem GUI-Programm):

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() 
+0

Ich würde ein Stück Code aus [SaveFromFirefox.py Beispiel] (https://github.com/pywinauto/pywinauto/blob/master/examples/SaveFromFirefox.py) zu Ihrer Antwort hinzufügen. –