본문 바로가기
Automation

ChatGPT로 NoSuchElementException을 해결할 수 있을까?

by Zeromk2 2023. 4. 25.
728x90

요새 제가 가장 재미있게 가지고 노는 것은 Steam ChatGPT 입니다.

정말 이것저것 해보다보면 시간이 훅훅 지나가네요. AI계의 문명 같은 녀석이네요.

재미있게 이것저것 해보던도중에 문득 NoSuchElementException을 ChatGPT로 해결할 수 있을까? 라는 생각이 들었습니다.

이거 흥미롭군요?

그래서 바로 진행해보았습니다.

from appium import webdriver
from difflib import SequenceMatcher

# Appium 서버 연결 정보 설정
desired_caps = {
    "platformName": "Android",
    "deviceName": "emulator-5554",
    "appPackage": "com.example.package",
    "appActivity": "com.example.package.MainActivity",
}

# Appium 드라이버 실행
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

# 버튼 요소 찾기
button_element = driver.find_element_by_android_uiautomator('new UiSelector().text("확인")')

# 버튼 텍스트 가져오기
button_text = button_element.text

# 버튼 텍스트가 '확인'과 일치하는지 확인
if button_text == '확인':
    print('버튼 텍스트가 일치합니다.')
else:
    # 유사한 텍스트를 찾기 위한 기준값 설정
    similarity_threshold = 0.8

    # 버튼 요소 주변 요소 찾기
    sibling_elements = button_element.find_elements_by_xpath('following-sibling::* | preceding-sibling::*')

    # 주변 요소에서 유사한 텍스트 찾기
    similar_text = None
    for sibling_element in sibling_elements:
        sibling_text = sibling_element.text
        if SequenceMatcher(None, button_text, sibling_text).ratio() > similarity_threshold:
            similar_text = sibling_text
            break

    if similar_text:
        print(f"주변 요소에서 '{similar_text}' 텍스트를 찾았습니다.")
    else:
        print("주변 요소에서 유사한 텍스트를 찾을 수 없습니다.")

# Appium 드라이버 종료
driver.quit()

 

코드는 보기 편하기 위해 직접 붙여넣었습니다. 

SequenceMatcher 라는 것은 처음 알게 되었습니다. 저런 함수도 있군요! 역시 무릎을 탁 치며 감탄해 하고 있었는데

ChatGPT너 정말 쩌는구나?

코드를 자세히보니 구버전 Appium 코드였습니다. 

현재는 find_element_by_xpath를 예로 들면 _by_xpath 까지는 사용하지 않습니다. (1.22.x 버전 기준)

find_element(AppiumBy.XPATH) 지금은 이렇게 사용되고 있죠. 

구버전이라도 코드는 바꾸면 되니 코드를 더 보았습니다~ 음... 그런데 처음부터 이해가 가지 않더군요.

위의 코드는 '확인' 이라는 텍스트가 있는 버튼을 못찾으면 바로 NoSuchElementException 이 발생하면서 종료될것입니다.

아니 왜 이렇게 코드를 짠거야! 라고 봤더니 제가 프롬프트를 그렇게 썼네요...

이런 멍충멍충

Regenerating Response를 몇번 더 해보았는데 코드는 유사했습니다. 

NoSuchElementException 예외처리를 하더라도 기준되는 element가 있어야 하는데 이걸 못찾으면 코드는 더이상 진행되지 않을 것으로 보였습니다. 

뭔가 될듯말듯한 상황이라 이건 나중에 프롬프트를 좀 더 자세하게 작성해서 가지고 놀아봐야겠습니다. :)

아 이렇게 네이버 블로그 처럼 제목에 대한 결과가 본문에 없는 포스팅으로 끝낼 수는 없습니다. 

결과는 '이번에는 실패' 입니다. 다만 가능성은 보았네요. 여러분들도 같이 찾아보시죠~!

댓글