2017-03-02 3 views
0

나는 pywinauto를 사용하여 응용 프로그램을 자동화하고 있습니다. 개체 이름과 속성을 인쇄하려면 PrintControlIdentifiers을 사용했습니다. 일부 편집 상자에는 이름에 공백이 있습니다. 이 컴파일 오류가 발생으로파이썬 코드에 이름이 공백 인 편집 상자에 SetText를 사용하는 방법

| [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

참고 :

parentWindow.child_window(best_match='Cr__PriceEdit1').SetText("name1") parentWindow.child_window(best_match='TrPriceEdit').SetText("name1") 

또 다른 방법은 "가장 일치하는"수행은 키 기반 액세스입니다 내가 "CR을 child_window (제목 =를 사용하는 알 . PriceEdit0 ", class_name ="Edit ")하지만 편집 상자 이름과 함께 SetText를 직접 사용할 수있는 방법이 있는지 알고 싶습니다. –

답변

1

pywinauto는 편집 상자와 같은 동적 텍스트 컨트롤의 정적 이름 지정을 위해 인접 컨트롤을 사용할 수 있습니다. 적용 할 수있는 5 rules here이 있습니다. 귀하의 경우 그것은 규칙 4이어야합니다.

은 왼쪽에 정적 텍스트 (레이블) 인 반면 "Cr. Price"은 편집 상자 안에있는 텍스트라고 가정합니다. 물론 편집 상자 내용이 끊임없이 변하기 때문에 모든 곳에서 정적 텍스트를 사용하는 것이 좋습니다.

잘못된 특성 이름이있는 구문 오류를 방지하려면 허용되지 않는 기호를 밑줄로 바꾸어야합니다. 아니면 그냥 제거 할 수 있습니다 :

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

이것은 pywinauto가 "최상의 일치"알고리즘을 사용하여 속성 액세스를 수행하기 때문에 효과가 있습니다. 매 2 개의 텍스트 사이의 거리를 계산하고 가장 가까운 텍스트를 선택하거나 모든 텍스트가 대상에서 너무 멀면 실패합니다.

이 문은 동일한 작업을 수행 말 :

parentWindow[u'Tr. PriceEdit'].SetText('name1') 
# is the same as 
parentWindow.child_window(best_match=u'Tr. PriceEdit').SetText('name1') 
+0

허용되지 않는 기호를 밑줄로 대체하십시오. 감사 –