如何将SetText用于名称在python代码中有空格的编辑框

时间:2017-03-02 02:58:15

标签: python pywinauto

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

| [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与编辑框名称一起使用的方法。

1 个答案:

答案 0 :(得分:1)

pywinauto可以使用邻居控件来静态命名动态文本控件,如编辑框。可以应用5 rules here。在你的情况下,它应该是规则#4。

我认为"Cr. Price"是编辑框内的文字,而"Tr. Price"是左侧的静态文字(标签)。当然,随处使用静态文本会更好,因为编辑框内容会不断变化。

为避免使用不正确的属性名称的语法错误,您应该使用下划线替换不允许的符号。或者你可以删除它们:

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

这应该有效,因为pywinauto使用所谓的#34;最佳匹配"算法进行属性访问。它计算每两个文本之间的距离,并选择最接近的文本,如果所有文本都与目标文本相距太远,则会失败。

说这些陈述也是这样的:

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')