[PYTHON] Python에서 셀렌을 사용하여 경고가 있는지 확인하십시오.
PYTHONPython에서 셀렌을 사용하여 경고가 있는지 확인하십시오.
나는 사용자를 관리하는 웹 페이지를위한 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.내가하는 일은 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.나는 이것이 너무 늦었으며 당신이 몇 년 전에이 문제를 풀었지만 미래의 독자들의 참고가 될 수 있도록 내 분석과 결과를 게시하고 싶습니다.
나는 이것이 너무 늦었으며 당신이 몇 년 전에이 문제를 풀었지만 미래의 독자들의 참고가 될 수 있도록 내 분석과 결과를 게시하고 싶습니다.
장고 웹 사이트 개발 프로젝트를 진행하고 있는데 현재 특정 웹 페이지를 열면 오류 메시지 상자가 팝업되는 버그가 있습니다. 내 환경은 다음과 같습니다.
"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.자바에서 우리는 이것을 좋아한다.
자바에서 우리는 이것을 좋아한다.
WebDriverWait wait3 = new WebDriverWait(driver, 7000); wait3.until(ExpectedConditions.alertIsPresent()); driver.switchTo().alert().accept();
경고가 없다면 암시 적으로 경고를 기다려서 'Alert is not Exceptio'를 던져 버릴 수 있습니다.
희망이 도움이됩니다.
from https://stackoverflow.com/questions/19003003/check-if-any-alert-exists-using-selenium-with-python by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] Homebrew + Mac OS X 10.8의 파이썬 : 치명적인 파이썬 오류 : PyThreadState_Get : mapnik을 가져 오는 현재 스레드가 없습니다. (0) | 2018.10.13 |
---|---|
[PYTHON] Flask 요청을 threaded = True와 동시에 처리합니다. (0) | 2018.10.13 |
[PYTHON] 파이썬에서 list와 list [:]의 차이점은 무엇입니까? (0) | 2018.10.13 |
[PYTHON] 파이썬에서 for 루프 (0) | 2018.10.13 |
[PYTHON] r 및 rb 모드에서 텍스트 파일 구문 분석의 차이점 (0) | 2018.10.13 |