如何对名称在python代码中包含空格的编辑框使用SetText

如何对名称在python代码中包含空格的编辑框使用SetText,python,pywinauto,Python,Pywinauto,我正在使用pywinauto自动化应用程序。我使用PrintControlIdentifiers打印对象名称和属性。很少有编辑框的名称中有空格。以下是一个例子: | [u'Cr. PriceEdit1', u'Cr. PriceEdit0', u'Tr. PriceEdit'] | child_window(class_name="Edit") 我不能使用parentWindow.Cr。PriceEdit1.SetText(“name1”),因为它会导致编译错误。如何在代码中使用此控件执

我正在使用pywinauto自动化应用程序。我使用
PrintControlIdentifiers
打印对象名称和属性。很少有编辑框的名称中有空格。以下是一个例子:

| [u'Cr. PriceEdit1', u'Cr. PriceEdit0', u'Tr. PriceEdit']
   | child_window(class_name="Edit")
我不能使用
parentWindow.Cr。PriceEdit1.SetText(“name1”)
,因为它会导致编译错误。如何在代码中使用此控件执行
SetText


注意:我知道如何使用
子窗口(title=“Cr.PriceEdit0”,class\u name=“Edit”)
,但仍然想知道是否有一种方法可以直接将SetText与编辑框名称一起使用。

pywinauto可以使用邻居控件对动态文本控件(如编辑框)进行静态命名。有很多方法可以应用。在你的情况下,这应该是第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')

注意:我知道使用child_window(title=“Cr.PriceEdit0”,class\u name=“Edit”),但仍然想知道是否有一种方法可以直接使用编辑框名称的SetText。用下划线替换不允许的符号-这对我来说很有效。谢谢