我使用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与编辑框名称一起使用的方法。
答案 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')