Как проверить наличие всплывающих предупреждений с использованием селена в Python - PullRequest
0 голосов
/ 28 сентября 2018

Я хочу продолжить следующую итерацию, если на удаляемой веб-странице есть всплывающее сообщение.То есть, если есть какое-либо всплывающее сообщение, я хочу принять это сообщение и перейти к следующему элементу, т.е. перейти к началу цикла.

Для этого я использую следующий фрагмент кода:

from tkinter import *
from tkinter import messagebox as msg
from tkinter import filedialog as fd
from tkinter import ttk
from tkinter import StringVar as sv
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException


for(i in range(0,5)):
      try:
          click_alert=driver.switch_to_alert()
          click_alert.accept()

          continue
      except TimeoutException:
           print('wrong value in'+i+'th row . Please check the value ') 

Появляется следующая ошибка:

Исключение в обратном вызове Tkinter

Traceback (most recent call last):
  File "C:\ProgramData\Anaconda3\lib\tkinter\__init__.py", line 1699, in __call__
    return self.func(*args)
  File "C:/Users/chowdhuryr/Desktop/ATT RESEARCH BOT/GUI.py", line 64, in printMessage
    self.Scrapper(str1,str2)
  File "C:/Users/chowdhuryr/Desktop/ATT RESEARCH BOT/GUI.py", line 163, in Scrapper
    click_alert=driver.switchTo().alert()

Теперь я почти уверен, что ошибка лежит в click_alert=driver.switch_to_alert(), потому что я проверил ее, используянекоторые проверки вменяемости.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Обычно мы не ставим круглые скобки после for.И, кроме того, похоже, что оповещения еще нет, когда вы собираетесь переключиться на.Ваш цикл for может быть просто занятым ожиданием, когда процессор занят в цикле, поэтому вместо того, чтобы просто чрезмерно загружать процессор, вы можете добавить режим ожидания на некоторое время, когда окно предупреждения еще не присутствует.Фрагмент кода может быть исправлен следующим образом:

for i in range(0,5):
    try:
        click_alert=driver.switch_to_alert()
        click_alert.accept()
        continue
    except TimeoutException:
        print('wrong value in'+i+'th row . Please check the value ')
    except NoAlertPresentException:     
        print('i = ', i, 'alert is not present yet, waiting for some time')
        time.sleep(60) # Delay for 1 minute (60 seconds)
    except:
        print "Unexpected error:", sys.exc_info()[0]
        raise   
0 голосов
/ 28 сентября 2018
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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...