2014-06-17 6 views
0

PyWinAuto를 사용하여 응용 프로그램을 자동화하는 Python 2.7 스크립트가 있습니다. 응용 프로그램의 한 지점에서 오랜 시간 동안 무언가를합니다 ... 때로는 15 초, 때로는 2 분까지 ... 절대 알지 못합니다 ... 매번 다른 경우가 있습니다.PyWinAuto 프로그램이 파이썬 팝업을 기다리도록하기

일단 프로세스가 완료되면 팝업이 나타나고 PyWinAuto를 계속 사용하고 싶습니다. 그래서, 나는 프로그램을 기다리게하고 그 팝업 대화 상자가 나타나는지 확인하려고 노력하고있다. 그럴 때, 나는 그 고리에서 벗어나려고 노력한다. 다음 코드를 살펴 내가 설명하고있는 무슨 않는 그이다 : 그러나

all_done = 1 
    while all_done != 1: 
     try: 
      app.Phazer.Static2.Texts() == [u'Would you like to Store Results?'] 
      all_done = 1 
      break 
     except: 
      print("Testing...") 
      time.sleep(2) 

..rest of the code.. 

, 시간의 80 %, 그렇지 않으면, PyWinAuto 때로는 루프 점프 ....마다 작동하고 일을하려고 아직 나타나지 않은 팝업 대화 상자에 표시됩니다.

저는 파이썬을 처음 접했지만, 더 똑똑하고 믿을만한 방법이 있어야한다는 것을 알고 있습니다. 어떤 생각입니까?

답변

1

내가 상상할 수있는 유일한 경우는 app.Phazer.Static2가 때때로 다른 컨트롤과 일치한다는 것입니다.

app.Phazer.Static2는 app.Phazer.ChildWindow (best_match = 'Static2')와 동일합니다. 가장 좋은 일치 알고리즘을 사용하여 비슷한 이름의 정적 텍스트를 캡처 할 수 있습니다.

비교 연산자 ==는 예외를 발생시키지 않으므로 잘못된 정적 텍스트가 표시 될 수 있으며 False이면 아무 것도 반환하지 않으며 all_done = 1이면 중단됩니다. 그게 전부 야.

당신은 당신이 적절한 제어와 연결하기 위해 다음 코드를 만들 수 있습니다

app.Phazer.ChildWindow(class_name='Static', ctrl_index=1) 

또는

app.Window_(title='Phazer', class_name='#32770').ChildWindow(class_name='Static', ctrl_index=1) 

당신이 대화를 캡처와 의심에 있다면

.

그리고 최종 검사해야

if app.Phazer.ChildWindow(class_name='Static', ctrl_index=1).Texts() != [u'Would you like to Store Results?']: 
    raise Exception()