Selenium python, как закрыть всплывающее окно?

Сценарий:

  • Нажмите ссылку «Зарегистрироваться» в верхней навигации.
  • Это открывает форму наложения (всплывает)
  • Я заполняю идентификатор электронной почты и выбираю переключатель (новый клиент)
  • Нажмите «Отправить»
  • Появится новая форма оверлея (всплывающее окно)
  • I Введите всю информацию (сначала, фамилию и т. Д.) И нажмите «Отправить».
  • Наложение (всплывающая форма) открывается, показывая сообщение «Спасибо».

Проблема: – Я хочу нажать «X» в правом верхнем углу этого всплывающего окна, чтобы закрыть его.

Попробовали следующий Xpath:

browser.find_elements_by_xpath('html/body/div[7]/div[1]/a/span').click() 

Это дает ошибку :

 Traceback (most recent call last): File "C:\Python27\Off5th_Registration", line 25, in <module> browser.find_elements_by_xpath('html/body/div[7]/div[1]/a/span').click() AttributeError: 'list' object has no attribute 'click' 

Пробовали по имени класса :

 browser.find_element_by_class_name('ui-dialog-titlebar-close ui-corner-all').click() 

Это дает ошибку :

 Traceback (most recent call last): File "C:\Python27\Off5th_Registration", line 25, in <module> browser.find_element_by_class_name('ui-dialog-titlebar-close ui-corner-all').click() File "C:\Python27\lib\selenium\webdriver\remote\webdriver.py", line 341, in find_element_by_class_name return self.find_element(by=By.CLASS_NAME, value=name) File "C:\Python27\lib\selenium\webdriver\remote\webdriver.py", line 681, in find_element {'using': by, 'value': value})['value'] 

Пожалуйста помоги!!

One Solution collect form web for “Selenium python, как закрыть всплывающее окно?”

Прежде всего, вы используете find_elements_by_xpath и это возвращает вам список элементов, вы должны использовать find_element_by_xpath (обратите внимание на не множественное число).

Во-вторых, я не уверен, что ваш xpath правильный, хотя я не уверен, но я помню из какого-то места, что вам нужно использовать полный xpath (начиная с // или /). Поэтому в вашем случае это будет '//html/body/div[7]/div[1]/a/span'

В-третьих, сложные имена классов не поддерживаются, в контексте webdriver это означает, что вы не можете выбрать by_class_name, если у вашего имени класса есть пробел.

В любом случае, попробуйте сделать следующее:

 browser.find_element_by_xpath('//a[@class=\"ui-dialog-titlebar-close ui-corner-all\"]').click() 

РЕДАКТИРУЙТЕ, чтобы ответить на ваш комментарий: возможно, вы слишком быстро добираетесь туда? Пытаться:

 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC element = WebDriverWait(driver, 60).until(EC.visibility_of_element_located((By.XPath, '//a[@class=\"ui-dialog-titlebar-close ui-corner-all\"]'))) 

Проверьте здесь.

  • Многопроцессорные и Selenium Python
  • Как передать параметры в драйвер Selenium Chrome с помощью Python?
  • Драйвер Selenium firefox снимает скриншот окна (не полноэкранный)
  • Использование расширений с селеном (Python)
  • RuntimeError: не удалось завершить работу тестового сервера в течение 2 секунд. Сервер может застрять или генерировать медленный ответ. - Django
  • Очистить с помощью BeautifulSoup с сайта, использующего разбиение на страницы AJAX с помощью Python
  • Python Webdriver вызывает ошибку http.client.BadStatusLine
  • Как заблокировать всплывающее окно в Selenium 2 python
  • Python - лучший язык программирования в мире.