2016-05-04 22 views
9

Otomatik test yapıyorum ve bir dosya iletişim kutusu alıyorum. Windows açık dosya iletişim kutusundan python veya selenyum ile bir dosya seçmek istiyorum.Python ile Windows dosya iletişiminden dosya aç Otomatik olarak

NOT: İletişim kutusu başka bir program tarafından verilir. Tkinter ile yaratmak istemiyorum.

THIS:

Pencere benziyor.

Bu nasıl yapılır?

+0

[basit Diyaloğu ile Python bir dosyayı seçme] Olası yinelenen (http://stackoverflow.com/questions/3579568/python-with-simple-dialog ile dosya-dosyası seçerek) –

+1

@Alvin Lütfen nota bakınız. – kame

+0

Selenium size yardımcı olmayacaktır. [Tag: AutoIt], [tag: Sikuli], [tag: RobotFramework] 'ı düşündünüz mü? – SiKing

cevap

5

Ctypes kitaplığını kullanabilirsiniz.

bu kodu göz önünde bulundurun: Her açık pencerenin üzerinde

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) 

Sen döngü ve seçtiğiniz birinin anahtarı vuruş gönderebilir. - WM_KEYDOWN (0x0100), tab (0x09) ait virtual-key code ve 4. argüman repeat count, scan code, extended-key flag, context code, previous key-state flag, and transition-state flag pencere Hendler (hwnd), BEDEN anahtar göndermek için:

SendMessage fonksiyon 4 params alır.

Ayrıca, tuş, anahtar, chars, döner vb. Gönderebilirsiniz ... Yardım için belgeleri kullanın. Win32 Python: Getting all window titles

İyi şanslar:

Bir referans olarak kullandı!

+0

İlk dosyaya nasıl tıklayacağınızı da anlatabilir misiniz? Öğe adını nasıl alırsınız? Teşekkürler! – kame

5

pywinauto paketini kullanmayı düşünün. Herhangi bir GUI programını otomatikleştirmek için çok doğal bir sözdizimi vardır.

enter image description here

Kod örneği, not defteri bir dosyayı açarken. (Bu GUI'nizin programında görünen pencere başlıkları/kontrol etiketleri kullanır) sözdizimi bağımlı yerel olduğunu unutmayın:

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

[SaveFromFirefox.py örnek] (https://github.com/pywinauto/pywinauto/blob/master/examples/SaveFromFirefox.py) adresinden cevabınıza bir parça kod eklerim. –