2017-03-02 82 views
0

我正在使用pywinauto自動執行應用程序。我用PrintControlIdentifiers打印對象名稱和屬性。很少有編輯框在名稱中有空格。這裏有一個例子:如何使用SetText作爲名稱在python代碼中有空格的編輯框

| [u'Cr. PriceEdit1', u'Cr. PriceEdit0', u'Tr. PriceEdit'] 
    | child_window(class_name="Edit") 

我不能使用parentWindow.Cr. PriceEdit1.SetText("name1"),因爲它會導致編譯錯誤。如何在代碼中使用此控件來執行SetText

注意:我知道使用child_window(title="Cr. PriceEdit0", class_name="Edit"),但仍然想知道是否有方法可以直接使用SetText和編輯框名稱。

+0

注:我知道使用child_window(標題=「鉻。PriceEdit0「,class_name =」Edit「),但仍想知道是否有方法可以直接使用SetText和編輯框名稱。 –

回答

1

pywinauto可以使用鄰居控件來靜態命名動態文本控件,如編輯框。有5 rules here可以應用。你的情況應該是規則#4。

我想"Cr. Price"是編輯框內的文本,而"Tr. Price"是左側的靜態文本(標籤)。當然,因爲編輯框的內容在不斷變化,所以最好使用靜態文本。

例如,要避免使用不正確的屬性名稱的語法錯誤,請使用下劃線替換不允許的符號。或者,你可以將其刪除:

parentWindow.Cr__PriceEdit1.SetText("name1") 
parentWindow.TrPriceEdit.SetText("name1") 

這應該工作,因爲pywinauto採用所謂的「最佳匹配」算法進行屬性的訪問。它計算每兩個文本之間的距離並選擇最接近的文本,如果所有文本距目標文本太遠,則會失敗。

說這些語句做同樣的:

parentWindow.child_window(best_match='Cr__PriceEdit1').SetText("name1") 
parentWindow.child_window(best_match='TrPriceEdit').SetText("name1") 

另一種方式做「最佳匹配」是一個基於密鑰訪問:

parentWindow[u'Tr. PriceEdit'].SetText('name1') 
# is the same as 
parentWindow.child_window(best_match=u'Tr. PriceEdit').SetText('name1') 
+0

用下劃線替換不允許的符號 - 對我有用。謝謝 –

相關問題