2017-08-29 196 views
0

我的項目圍繞自動執行一些任務。我打開一個應用程序,一個新的3D文件,然後我從一個訪問基地做一些操作。我選擇了pywinauto和圖形交互,因爲操作員需要對軟件進行干預。pywinauto更改應用程序名稱

我的問題是:當我打開一個新文件時,應用程序的名稱會改變。還有就是代碼:

# Search data on the Access Base 
cursor = conn.cursor() 
cursor.execute("SELECT * FROM [SophieBot_produit] WHERE [SophieBot_produit].[ID PRODUCTION] =?",(prod)) 
produit_sql = cursor.fetchall() 
production, statut, produit_value, nb_element, cas, gamme, sl_tps_open, sl_tps_gen, sl_tps_save = produit_sql[0] 
produit = str(produit_value).zfill(8) 

    # Data work, check with print() 

#Connecting to the software 
app = application.Application() 
app.Connect(path='C:\\myprogram') 

    # First step everything works 
app.SLMAutoFab.menu_select("File -> Open") 
app.window_(title_re="Open file.*").Edit.SetEditText('S:\\32 - Articles\\'+ str(gamme) +'\\' + str(cas) +'\\' + str(produit) +'_sup.stl') 
app.window_(title_re="Open file.*").Ouvrir.Click() 

    # New step is to do operation on the software 

現在我的軟件應用程序的名稱改變Myprogram - 3DFile

當你寫的新名稱一切正常,例如:

app.SLMAutoFab00057389_sup.Part.Click() 

但軟件變更的名稱,所以我嘗試:

win = 'MyProgram' + str(produit) 
app.win.Part.Click() 

該代碼不起作用,錯誤消息是:

MatchError: Could not find 'win' in 'dict_keys

我試圖用window(handle)連接,如果它的工作原理將更新帖子。任何提示或指針非常感謝。

+0

,請複製粘貼確切的錯誤信息 –

+0

嗨插入錯誤消息的另一條評論 – Axel35136

回答

0

您可以使用正則表達式來匹配部分窗口標題。請致電app.window()查看title_re屬性。

文檔:Window specification

這個例子所有窗口匹配有與 「SMLAutoFab」 開頭的標題:

w = app.window(title_re='SMLAutoFab.*') 
w.Edit.SetEditText('S:\\32 - Articles\\'+ str(gamme) +'\\' + str(cas) +'\\' + str(produit) +'_sup.stl') 
+0

你好neuhaus,不適合我的個人技能,爲什麼你使用這個指令,我認爲這是寫在應用程序內的文本,如記事本。我也嘗試best_match也沒有成功 – Axel35136

0

有錯誤@Jens

File "link\Bot.py", line 99, in slicing 
 
    win.Part.Click() 
 
    File "C:\link\site-packages\pywinauto\application.py", line 351, in __getattribute__ 
 
    ctrls = self.__resolve_control(self.criteria) 
 
    File "C:\link\site-packages\pywinauto\application.py", line 248, in __resolve_control 
 
    raise e.original_exception 
 
    File "C:\link\site-packages\pywinauto\timings.py", line 425, in wait_until_passes 
 
    func_val = func(*args) 
 
    File "C:\link\site-packages\pywinauto\application.py", line 190, in __get_ctrl 
 
    dialog = self.backend.generic_wrapper_class(findwindows.find_element(**criteria[0])) 
 
    File "C:\link\site-packages\pywinauto\findwindows.py", line 84, in find_element 
 
    elements = find_elements(**kwargs) 
 
    File "C:\link\site-packages\pywinauto\findwindows.py", line 300, in find_elements 
 
    elements = findbestmatch.find_best_control_matches(best_match, wrapped_elems) 
 
    File "C:\link\findbestmatch.py", line 533, in find_best_control_matches 
 
    raise MatchError(items = name_control_map.keys(), tofind = search_text) 
 
MatchError: Could not find 'SLMAutoFab.*' in 'dict_keys(['Programblabla']

+0

請通過編輯將其移到問題中。或者它會被標記爲不是答案。 –

0

好的,我找到了。這很愚蠢,靈感來自neuhaus。

我只是把,但確切的名字,我忘了...空間:

win = app.window(title=name_sup) 
 
win.Part.Click()

相關問題