2016-05-04 19 views
9

Wykonuję testy automatyczne i wyświetlam okno dialogowe pliku. Chcę wybrać plik z okna dialogowego otwierania plików z pythonem lub selenem.Otwórz plik z okna dialogowego pliku z pythonem automatycznie

UWAGA: Okno dialogowe jest podawane przez inny program. Nie chcę tworzyć tego z Tkinter.

Okno wygląda następująco:

THIS.

Jak to zrobić?

+0

Możliwy duplikat [Wybór pliku w Pythonie z prostą Dialog] (http://stackoverflow.com/questions/3579568/choose-a-file-in-python-with-simple-dialog) –

+1

@Alvin Zobacz notatkę. – kame

+0

Selen nie pomoże. Czy rozważałeś [tag: AutoIt], [tag: Sikuli], [tag: RobotFramework]. – SiKing

Odpowiedz

5

Możesz użyć biblioteki ctypes.

Rozważmy następujący kod:

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) 

You pętli na każdym otwartym oknie i wysłaniu klucza skok do nich wybrać.

Funkcja SendMessage dostaje 4 params: Hendler okno (hwnd) Kluczem phisical wysłać - WM_KEYDOWN (0x0100), The virtual-key code od tab (0x09) oraz repeat count, scan code, extended-key flag, context code, previous key-state flag, and transition-state flag w 4. argument.

Możesz również wysłać klucz, klawisze w dół, znaki, zwroty itp. Skorzystaj z dokumentacji, aby uzyskać pomoc.

użyłem tego jako odniesienie: Win32 Python: Getting all window titles

powodzenia!

+0

Czy możesz również opisać, jak kliknąć pierwszy plik? Jak uzyskać nazwę elementu? Dzięki! – kame

5

Rozważ skorzystanie z pakietu pywinauto. Ma bardzo naturalną składnię do automatyzacji dowolnych programów GUI.

enter image description here

przykład kod, otwierając plik w Notatniku. Zauważ, że składnia jest locale zależne (używa widoczne tytuły okna/etykiet kontrolnych w programie 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() 
+0

Chciałbym dodać trochę kodu z [SaveFromFirefox.py przykład] (https://github.com/pywinauto/pywinauto/blob/master/examples/SaveFromFirefox.py) do odpowiedzi. –

Powiązane problemy