Как нажать на всплывающий элемент в Chrome с помощью Selenium и Python - PullRequest
0 голосов
/ 03 мая 2019

Во время тестирования моего кода автоматизации я встретил ужасную веб-страницу.

Когда я щелкаю элемент, на странице появляется новое окно браузера и предупреждение.

После этого я ничего не могу сделать, потому что предупреждение непобедимо.

Как мне пройти через это?

Моя среда выглядит следующим образом:

  • Python 3.6.7
  • Селен 3.141.0

Пожалуйста, попробуйте это.

from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.kebhana.com/foreign/index.do')

el = driver.find_element_by_xpath('//*[@id="header"]/div[2]/div/div[2]/div/div/ul/li[21]/ul/li[2]/ul/li[4]/a')
driver.execute_script("arguments[0].click();",el)

Затем вы можете увидеть новое окно браузера с предупреждением.

И я не могу найти никакого решения, чтобы отклонить это предупреждение.

Если у вас есть блестящий способ справиться с тревогой, пожалуйста, покажите мне.

Ответы [ 2 ]

0 голосов
/ 03 мая 2019

Элемент представляет собой Layer Message и является частью HTML DOM , а также для определения местоположения и щелчка / отклонения элемента, который необходимо вызвать WebDriverWait дляelement_to_be_clickable() и вы можете использовать любое из следующих решений:

  • Использование CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a#opbLayerMessage0_OK[href$='HanaBank']"))).click()
    
  • Использование XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@id='opbLayerMessage0_OK' and contains(@href, 'HanaBank')]"))).click()
    
  • Примечание : необходимо добавить следующий импорт:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
0 голосов
/ 03 мая 2019

Вот логика, чтобы перейти в новое окно и затем принять предупреждение.

# this will switch to the new window
driver.switch_to.window(driver.window_handles[-1])
# now accept the alert
driver.switch_to.alert.accept()
...