본문 바로가기
Software coding skill(python, web등)

Pywinauto 2 - Window Specification

by 호빵님 2020. 2. 10.
반응형

Pywinauto 공식 사이트 내용을 번역한 것입니다.

 

It’s a core concept for the high level pywinauto API.

Window specification은 high level pywinauto API를 위한 코어 개념이다.

 

You are able to describe any window or control approximately or in more details even if it doesn’t exist yet or already closed. Window specification also keeps information about matching/search algorithm that will be used to get a real window or control.

너는 어떤 윈도우나 컨트롤을 대략적이거나 더 자세하게 표현할 수 있다. 심지어 그것이 아직 존재하지 않거나, 이미 닫혔어도 말이다. Window specification은 또한 매칭/검색 알고리즘에 대한 정보를 갖고 있다. 이 알고리즘은 실재 윈도우나 컨트롤을 가져오는데 사용될 것이다.

 

Let’s create a detailed window specification:

자세한 window specification을 생성해보자.

>>> dlg_spec = app.window(title='Untitled - Notepad')

>>> dlg_spec
<pywinauto.application.WindowSpecification object at 0x0568B790>

>>> dlg_spec.wrapper_object()
<pywinauto.controls.win32_controls.DialogWrapper object at 0x05639B70>

 

Actual window lookup is performed by wrapper_object() method.

wrapper_object() 메소드의 의해서 실재 window lookup이 실행된다.

 

It returns some wrapper for the real existing window/control or raises ElementNotFoundError. This wrapper can deal with the window/control by sending actions or retrieving data.

그것은 실재 존재하는 윈도우나 컨트롤을 위한 래퍼를 반환하거나, ElementNotFoundError를 발생시킨다. 이 래퍼는 액션을 보내거나 데이터를 검색함에 의해서, 그 윈도우나 컨트롤을 처리할 수 있다.

 

But Python can hide this wrapper_object() call so that you have more compact code in production. The following statements do absolutely the same:

그러나 파이썬은 이 wrapper_object() 콜을 숨길 수 있다. 그래서 너는 양산에서 더 간단한 코드를 갖을 수 있다. 다음의 코드들은 절대적으로 같은 기능을 한다.

dlg_spec.wrapper_object().minimize() # while debugging
dlg_spec.minimize() # in production

 

https://pywinauto.readthedocs.io/en/latest/code/pywinauto.application.html#pywinauto.application.WindowSpecification.wrapper_object

 

pywinauto.application module — pywinauto 0.6.8 documentation

Prints identifiers for the control and for its descendants to a depth of depth (the whole subtree if None). Note The identifiers printed by this method have been made unique. So if you have 2 edit boxes, they won’t both have “Edit” listed in their identifi

pywinauto.readthedocs.io

 

 

 

There are many possible criteria for creating window specifications. These are just a few examples.

window specification을 생성하는 많은 가능한 기준들이 있다. 여기는 단지 몇가지 예제이다.

멀티레벨로 window찾아서 설정가능.

기준 여러개를 합쳐서 window찾아서 설정가능.

# can be multi-level
app.window(title_re='.* - Notepad$').window(class_name='Edit')

# can combine criteria
dlg = Desktop(backend="uia").Calculator
dlg.window(auto_id='num8Button', control_type='Button')

 

The list of possible criteria can be found in the pywinauto.findwindows.find_elements() function.

가능한 기준 리스트는 pywinauto.findwindows.find_elements() 함수 내에서 찾을 수 있다.

 

 

https://pywinauto.readthedocs.io/en/latest/code/pywinauto.findwindows.html

 

pywinauto.findwindows — pywinauto 0.6.8 documentation

© Copyright 2018, Mark Mc Mahon and Contributors Revision aea0429b.

pywinauto.readthedocs.io

하나의 매칭하고 싶은 element를 찾기위해서, find_window를 사용한다.

 

pywinauto.findwindows.find_window(**kwargs) :

find_elements 를 콜하고 오직 하나의 element의 핸들만 리턴되도록 한다. 설정한 기준에 의해서 하나 이상의 element가 찾아지면, error됨.

find_elements와 같은 기준의 argument들을 사용한다.

 

window specification 인스턴스 생성 순서:

1. element나 window를 찾는다.

 

2. window specification을 생성한다.

pywinauto.findwindows.find_elements() 를 인수로 전달할 수 있다.  Application.window() 와WindowSpecification.child_window()에게

 

3. 해당 window를 사용해서 콘트롤

반응형