복붙노트

[PYTHON] Python에서 셀렌을 사용하여 경고가 있는지 확인하십시오.

PYTHON

Python에서 셀렌을 사용하여 경고가 있는지 확인하십시오.

나는 사용자를 관리하는 웹 페이지를위한 Python 언어로 셀레늄을 사용하여 테스트를 작성하려고한다. 이 페이지에서 사용자는 사용자 역할을 추가 할 수 있으며 추가하는 동안 역할이 존재하면 경고가 발생합니다. 경고가 자바 스크립트 경고인지 또는 웹 페이지의 요소인지는 알 수 없습니다. 목록에서 역할을 확인하는 데 시간이 낭비되고 엄청난 부하가 있기 때문에 경고의 존재 여부를 자동으로 확인하려고합니다. 나는 이것을 시도했다 :

browser = webdriver.Firefox()
browser.get("url")
browser.find_the_element_by_id("add_button").click()
try:
    alert = browser.switch_to_alert()
    alert.accept()
    print "alert accepted"
except:
    print "no alert"

하지만 작동하지 않았고 "UnexpectedAlertPresentException"을 받았습니다. 나는 또한 이것을 시도 :

browser = webdriver.Firefox()
browser.get("url")
browser.find_the_element_by_id("add_button").click()
s = set(browser.window_handles)
s.remove(browser.current_window_handle)
browser.switch_to_window(s.pop()) 

하지만 같은 예외가 있습니다. 또한 해당 속성에 대한 액세스 권한을 얻을 수 있는지 확인하기 위해 방화 광과 함께 경고에 액세스하려고 시도했지만 오른쪽 클릭을 사용할 수 없습니다. 다른 언어에서도 솔루션을 매우 빨리 필요로합니다. 어쨌든 나는 그 접근법을 이해할 수있다. 나는 어떤 도움을 주셔서 감사합니다.

해결법

  1. ==============================

    1.내가하는 일은 WebDriverWait을 사용하여 경고가 표시되기 직전에 조건부 지연을 설정 한 다음 다음과 같이 전환하십시오.

    내가하는 일은 WebDriverWait을 사용하여 경고가 표시되기 직전에 조건부 지연을 설정 한 다음 다음과 같이 전환하십시오.

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.common.exceptions import TimeoutException
    
    browser = webdriver.Firefox()
    browser.get("url")
    browser.find_the_element_by_id("add_button").click()
    
    try:
        WebDriverWait(browser, 3).until(EC.alert_is_present(),
                                       'Timed out waiting for PA creation ' +
                                       'confirmation popup to appear.')
    
        alert = browser.switch_to.alert
        alert.accept()
        print("alert accepted")
    except TimeoutException:
        print("no alert")
    

    WebDriverWait (브라우저, 3)은 지원되는 경고가 표시 될 때까지 최소 3 초 동안 대기합니다.

  2. ==============================

    2.나는 이것이 너무 늦었으며 당신이 몇 년 전에이 문제를 풀었지만 미래의 독자들의 참고가 될 수 있도록 내 분석과 결과를 게시하고 싶습니다.

    나는 이것이 너무 늦었으며 당신이 몇 년 전에이 문제를 풀었지만 미래의 독자들의 참고가 될 수 있도록 내 분석과 결과를 게시하고 싶습니다.

    장고 웹 사이트 개발 프로젝트를 진행하고 있는데 현재 특정 웹 페이지를 열면 오류 메시지 상자가 팝업되는 버그가 있습니다. 내 환경은 다음과 같습니다.

    "UnexpectedAlertPresentException"에 대한 문서를 여기에서 읽었습니다.

    내 프로젝트에서 테스트 한 결과는 다음과 같습니다.

    따라서 try ... catch 블록은 "UnexpectedAlertPresentException"이 줄에 표시되기 때문에 작동하지 않는다고 생각합니다.

    browser.find_the_element_by_id("add_button").click()
    

    이는 또한이 줄에서 웹 페이지가 열리 자마자 경고 상자가 나타날 수 있음을 의미합니다.

    browser.get("url")
    

    즉, 페이지가 열리 자마자 경고 상자가 표시되는 문제가 숨겨져있을 수 있습니다. 이 문제를 먼저 해결해야 할 수도 있습니다.

    또 다른 사항은 다음과 같습니다.이 줄 뒤에 경고 상자가 표시되었다고 가정합니다.

    browser.find_the_element_by_id("add_button").click()
    

    그렇다면 alert = browser.switch_to_alert ()는 예외가 발생하지 않고 잘 작동해야합니다. 이는 여기서 설명하는 것과 모순됩니다. 이것은 또한 문제가 browser.get ( "url") 라인만큼 빠르다고 생각하게했다.

    분석 결과 문제가 다른 위치에 있다는 것을 보여주기 때문에 선택한 솔루션이 어떻게 문제를 해결하는 데 도움이되었는지 잘 모르겠습니다. 어쨌든, 나는 받아 들인 해결책을 재선을 요구하지 않는다. 나는 미래의 독자들에 대한 나의 생각을 나누고 싶다. 내가이 분석에서 잘못 분석 한 원인을 간과하거나 잘못 이해 한 경우에 사과하십시오 (그리고이 글을 읽는 데 낭비되는 시간은 낭비입니다 :-).

  3. ==============================

    3.자바에서 우리는 이것을 좋아한다.

    자바에서 우리는 이것을 좋아한다.

            WebDriverWait wait3 = new WebDriverWait(driver, 7000);
            wait3.until(ExpectedConditions.alertIsPresent());
            driver.switchTo().alert().accept();
    

    경고가 없다면 암시 적으로 경고를 기다려서 'Alert is not Exceptio'를 던져 버릴 수 있습니다.

    희망이 도움이됩니다.

  4. from https://stackoverflow.com/questions/19003003/check-if-any-alert-exists-using-selenium-with-python by cc-by-sa and MIT license