오늘은 UiPath에서 작업을 하다가 발생하는 예시 상황과 해당 상황을 극복한 간단한 방법을 공유합니다.

 

먼저 자동화 작업을 하면 만날 수 있는 보편적인 예시 상황을 먼저 들어보겠습니다. 특정 작업을 지시하고, 해당 작업이 완료되어야 표시가 되는 Element(ex> Button)가 있고, 그 요소가 식별된 후에 후행 작업을 진행한다고 할 때, 작업 완료의 판단을 해당 UI Element의 존재 여부를 확인해야 합니다. 

 

그때 가장 먼저 생각나는 Activity는 Element Exists!

 

Element Exists는 해당 요소가 있는지를 확인하여 Boolean값의 반환 값을 제공합니다. 가장 간단하게 해당 요소가 있는지 확인을 할 수 있는 Activity입니다.

 

먼저 사용을 했었고 그 와중에 문제가 발생하였습니다.

분명, 눈에 보이지 않고, 작업이 완료가 되지 않았는데, 해당 Element의 식별이 되는 것입니다. Element Exists의 결과값도 당연히 True로 나왔습니다.

 

이런 경우는 여러가지여러 가지 경우가 있을 수 있습니다. 우선 해당 환경이 Web Page의 Elements를 확인하는 경우라 제가 정확하게 내부 구성과 용어는 모르지만, 응용 프로그램에서도 해당 Component를 보이지 않게 처리하는 여러 가지 방법이 있습니다.

 

1. Visibility라는 속성값을 0/1 또는 True / False로 바꿔 설정

2. Z-Index라는 화면에 표시되는 위아래 값을 조절

3. 표시되는 영역의 좌표값을 없애버림

 - (표시되는 영역의 가로(Width)/세로(Height) 길이를 0으로 만들거나 영역 값을 설정

4. 부모 컨트롤을 위의 방법으로 처리

 

웹페이지가 구동되는 방식만을 가지고는 위에서 어떤 방법으로 처리를 했는지 사람이 봐서 알 수 있는 경우는 매우 드물거나 불가능에 가까울 것입니다. 하지만 여기서, Visibility값을 확인하기 위해서 Get Attribute Activity를 사용하여 보다 보니 Position이라는 속성 값에서 이 값이 UI Explorer에서는 2개의 점으로 표시되는 UiPath.Core.Region이라는 Type으로 반환되는 속성인데 그 속성 값이 아래와 같이 보입니다.

 

분명 (x, y) - (x' , y') 꼴로 영역을 표시하는 것처럼 보이는데, 두 점이 같습니다.

그러면 두 점 사이의 거리를 구하는 공식 (root( |x-x'|^2 +  |y-y'|^2))으로;;;;; 

당연히 거리도 영역의 넓이도 0이 나오겠죠!

 

즉, 이 속성 값의 변화를 통해서 화면에 보이게/안 보이게 처리를 하는 것을 확인하였고, 가로나 세로의 값이 0을 초과하는 값이 되는지를 일정 주기로 확인하였습니다. 

 

region.Rectangle.Value.Width.ToString과 같이 해당 영역의 가로길이(너비) 값을 반환받을 수 있었습니다. 

 

 

 

반복적으로 Check를 하다 보면 0을 넘는 경우가 있습니다.

 

그 말은 해당 Element가 표시되는 영역이 설정되었다는 뜻이고, 사람이 보는 것과 같이 화면에도 버튼이 나타났다는 것을 의미합니다.

 

따라서 해당 값이 0을 초과하는지 반복적으로 확인하여, 초과하는 경우 Flow Decision에서 아닌 경우와 분기를 나눠 처리하였습니다.

 

+ Recent posts