본문 바로가기

RPA

[UiPath] Selector 대소문자 무시하기

프로젝트 도중 문제가 또 생겼다.

 

프로세스를 만들어야하는 사이트에서 검색을 할때는 대소문자 구문을 안해서 case구분 없이 검색 결과가 뜨지만 Selector는 그렇지 않다는 것..

Docs도 찾아보고 구글링도 열심히 해본 결과 해결 방법은 두 가지 였다.

 

1. 2020.4부터 UiPath에서 지원하는 case sensitive 기능

2. 정규식(regex)을 사용하는 방법
(대소문자를 구분하는 selector를 사용하는 방법은 1번 방법뿐인것 같다..)

 

첫 번째로 case-sensitive를 이용하는 방법은 다음 링크에서 확인할 수 있다.
docs.uipath.com/studio/docs/case-sensitive-selectors

 

Case-Sensitive Selectors

About Case-Sensitive Selectors When a selector is built, the Case-Sensitive property makes it possible to identify elements by also taking into consideration the casing of an attribute's value. You can use case-sensitive along with RegEx on the same attrib

docs.uipath.com

<wnd app='notepad.exe' cls='Notepad' title='*제목 없음 - Windows 메모장' />
<wnd aaname='텍스트 편집' cls='Edit' />
<ctrl casesensitive:text='false' text='*keyword*'/>

casesensitive:<attribute-name>='true'

기본값은 true이며 false로 두어야 대소문자를 무시하는 Selector가 된다!

 

 

 

두 번째로는 20.4 버전 이전에서 작동하는 정규식을 이용하는 방법이다.

정상적으로 동작하는 줄 알았으나... 제대로 동작하지 않음을 확인하였습니다...
그래도 열심히 찾아본게 아까워서 남겨둡니다! 다음엔.. 안까먹겠지요
--------------------------------------------------------------------------------------------

사실 나는 20.4 이후의 버전을 사용해서 첫 번째 방법을 사용해도 상관없었지만 그래도 그 이전에는 어떻게 해결했는지 버전에 상관없는 해결방법이 너무 알고싶었다.

구글링을 열심히 해봤지만 내가 원하는 대소문자를 무시하는 문자열을 포함한 Selector를 설정하는 방법을 찾기 힘들어서 정규식에 관한 Docs를 찾아보고 forum을 뒤져본 후 해결 방법을 알게되었다.

우선 참조한 사이트는 다음과 같다.

regex101.com/ //작성한 정규식을 test할 수 있는 사이트
docs.microsoft.com/en-us/dotnet/standard/base-types/regular-expression-language-quick-reference // .NET regex docs
docs.uipath.com/studio/docs/regex-search // uipath regex docs

내가 원하는 정규식은 대소문자를 구분하지 않는 문자열을 포함한 Selector 였다.
예를 들어 aaname='docs', aaname='DocS', aaname='DOCS' 모두 선택할 수 있는 Selector를 원했다.

정규식 사이트에서도 검사를 하고 직접 UiPath Selector로 검사도 해본 뒤 원하는 결과를 얻었다!

클릭해서 보면 더 잘보입니다

<wnd app='notepad.exe' cls='Notepad' title='*제목 없음 - Windows 메모장' />
<wnd aaname='텍스트 편집' cls='Edit' />
<ctrl matching:text='regex' text='.*[(?i)keyword2].*' />

.은 모든 문자와 일치하며 *는 0~무제한으로 match된다
그래서 .*은 uipath Selector의 '*' 역할을 한다.

matching:<tagname>='regex' <tag_name>='<regex_command>'

위의 정규식을 사용하면 Selector도 Validate이고 regex test에서도 잘 동작한다!


----------------------------------------------------------------------

둘 다 잘 동작해서.. 잘 쓰고있는줄로만 알았던 정규식 selector가 제대로 된 것이 아니었다.. 
글을 쓰려고 사용했던 정규식 Selector를 재 구성하던 중 정규식이 제대로 동작하지 않는 현상이 계속 발생했다
정규식이 바뀌었을리는 없고... 뭔가 잘못되었다면 다시 작성하려고 또 구글링을 열심히 해봤다

그렇게 찾아낸 글..

 

#FeatureBlog - 19.10 - Using regular expression (Regex) in the selector attributes

It is now possible to use Regular Expressions in your selectors. Follow this guide to learn how! What’s new? We have added extra syntax to the Selector Editor to allow for advanced configuration of your selectors. Let’s begin As an example, I will be c

forum.uipath.com

forum.uipath.com/t/featureblog-19-10-using-regular-expression-regex-in-the-selector-attributes/159015// uipath forum [#FeatureBlog - 19.10 - Using regular expression (Regex) in the selector attributes]

정규식 Selector가 처음으로 나왔을 때도 대소문자 구분 Selector는 지원하지 않았던 것이다!!!!!!..... 그 이후로 1번 방법이 2020.2 Preview에서 처음으로 선보인것이었고..

이 이후로 forum을 기웃거려봤더니 다음과 같은 방법이 최선의 방법이었다...
forum.uipath.com/t/how-to-make-selectors-ignore-case-sensitivity/115490/8 //How to make selectors ignore case sensitivity?

 

그리고 안되는거였구나.. 하고 넘어가기엔 너무 찝찝해서 잘 동작하던 내 정규식을 뜯어보았다

[abc] Matches either an a, b or c character
원인은.. 대괄호였다! 그래서 작동안하던 Selector가 대괄호를 넣자마자 잘 작동했나보다....ㄱ-

KeYworkd2를 찾아줄거라고 찰떡같이 믿던 정규식은 'o' 단 한글자만 찾았고 나머지는 .*이 다 찾아주고 있었던 것이다!
왜냐하면 대괄호안에 들어간 문자들은 전체를 찾는 것이 아니라 한 글자만 찾기 때문이다

내 정규식은 '(', '?', 'i', ... 들을 앞에서부터 하나씩 찾는 정규식이었다... 그래도.. 정규식 공부 제대로 했다!!!!!!