pywinauto更改应用程序名称

时间:2017-08-29 12:42:13

标签: python pywinauto

我的项目围绕自动执行一些任务。我打开一个应用程序,一个新的3D文件然后我从一个访问基地做一些操作。我选择了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:在'dict_keys

中找不到'win'

我正在尝试与window(handle)建立联系,如果有效,我会更新帖子。非常感谢任何提示或指示。

3 个答案:

答案 0 :(得分:0)

您可以使用正则表达式来匹配部分窗口标题。

在致电title_re时查看app.window()属性。

文档:Window specification

此示例匹配标题以“SMLAutoFab”开头的所有窗口:

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

答案 1 :(得分: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']




答案 2 :(得分:0)

好的,我找到了。这是愚蠢的,灵感来自于neuhaus。

我只是说,但确切的名字,我忘了一个空间...:

B