2014-09-24 85 views
3

我必須爲WinForms應用程序構建一個自動化ui測試。我使用python 3.4與python的Windows擴展和pywinauto。使用menuStrip及其python項目

需要進行測試才能訪問應用程序的菜單,然後單擊其中一個子菜單項。

我使用下面的代碼來嘗試找到菜單。

#arrays to store the controls found 
classes = [] 
objects = [] 

#recursive method to get all the controls 
def getClasses(childHwnd, lparam): 
    objects.append(childHwnd) 
    classes.append(win32gui.GetWindowText(childHwnd)) 
    return 1 

#find handle of the main window 
hwnd = win32gui.FindWindow(None, 'Form1') 

#get all controls 
win32gui.EnumChildWindows(hwnd, getClasses, "a") 

# Result:  
# objects [1509794, 3344468] 
# classes ['Test', 'menuStrip1'] 

#trying to get the menu of the form 
win32gui.GetMenu(hwnd) #Returns 0 

圖片上,我測試了上面的代碼的形式爲:

Image of the form used for the tests above

正如你所看到的,menuStrip1被發現,但我還沒有找到一種方式來獲得它的孩子(Meniu 1,Meniu 2)。

有關如何查找菜單及其子項的任何想法?

+0

你有沒有找到解決方案?我開始認爲pywinauto可能不支持這個選項。 – AdamMc331 2015-06-02 13:58:40

+1

不幸的是,我沒有找到一種方法來使用pywinauto來做到這一點。嘗試其他解決方案後。我選擇使用另一種工具進行名爲Sikuli(http://www.sikuli.org/)的自動化測試。希望能幫助到你! – CristisS 2015-06-04 13:47:49

+0

很高興知道。我轉而使用了AutoIt,這也是一種不同的腳本語言。它沒有我發現的菜單支持,但我學會了使用鍵盤上的「alt」鍵訪問Windows菜單,所以我只是使用鍵盤快捷鍵來做我所需要的。不過謝謝。 :) – AdamMc331 2015-06-04 13:49:32

回答

1

嘗試沒有成功使用python 3.4 for python for windows extension和pywinauto來爲相應的項目創建自動化測試。我研究了其他工具,並最終選擇了一個名爲Sikul的i,它是基於屏幕上元素的圖像識別的自動化工具。它可能不是完美的工具,但它對我來說已經足夠了。

約蟒蛇其他意見的窗口延伸和pywinauto:

  • 只能在他們認識的控制來使用(例如,不 toolstripmenuitem)
  • 這是不可能的測試自定義控件(用於 原因以上)

關於Sikuli觀察:

  • 所有的腳本都用Python編寫的
  • 它可能不會在我以前的那一刻使用最新的Python語法
  • ,它有一些小錯誤
0

雖然答案已經發布了一個替代解決方案,我想添加一個可以在pywinauto中使用的解決方法。

在窗口上,ALT鍵可用於訪問菜單。對於我的具體示例,我有一個設置選項「設置 - >遠程登錄」。如果我想要點擊這個菜單選項,我首先必須發送ALT + S,然後鍵入L.要使用pywinauto進行此操作,假設您已經有了對該窗口的引用,可以這樣做:

myWindow.SetFocus() 
myWindow.TypeKeys("%s") #Clicks Settings 
myWindow.TypeKeys("l") #Clicks Login Remotely 

「%」字符用於表示鍵盤上的「ALT」鍵。此處另外需要注意的是,如果您有多個以相同字母開頭的菜單選項,則可能必須多次發送密鑰才能點擊所需的密鑰,然後發送回車鍵。如果沒有歧義(在這種情況下,只有一個子菜單選項以L開始),它會自動選擇。

這需要你瞭解你的菜單,並且以什麼順序,但只要它不改變這應該適合你。

+0

但是,我已經切換到AutoIt感謝[這個問題](http://softwarerecs.stackexchange.com/questions/20016/python-frameworks-tools-for-automated-winforms-testing),但我希望它是知道在pywinauto有一個解決方案。 – AdamMc331 2015-06-04 14:06:46

相關問題