Не удается получить доступ к элементам всплывающего окна входа в систему с помощью Selenium Python

#python #selenium #selenium-webdriver #automation-testing

Вопрос:

При нажатии кнопки входа в систему появляется всплывающее окно, в котором отображается вход в систему с помощью Google. Мне нужно войти в систему с помощью кнопки Google во всплывающем окне. Я показал некоторый предыдущий пример обработки всплывающего окна с помощью driver.switch_to_window метода и iframe метода. Но не могу получить доступ к элементу во всплывающем окне.

Приведенный ниже код показывает noSuchElementException

 import time

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait as wait

from time import sleep

driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://shatkora.co/grocery")

main_window=None
while not main_window:
    main_window=driver.current_window_handle

join_btn=driver.find_element_by_xpath("/html/body/div[1]/div[1]/div/div[1]/div/header/div/button")
join_btn.click()

login_window=None;
while not login_window:
    for handle in driver.window_handles:
        if(handle!=main_window):
            login_window=handle
            break

# driver.switch_to(login_window)

driver.switch_to.window(login_window)



login_with_google_button=driver.find_element_by_xpath("/html/body/div[1]/div[1]/div/div[6]/div/div/div/div[1]/button")
login_with_google_button.click()

 

Ответ №1:

Вам не нужно switch to any windows , также используйте абсолютный xpath с explicit waits.

 driver = webdriver.Chrome(driver_path)
driver.maximize_window()
driver.get("https://shatkora.co/grocery")
wait = WebDriverWait(driver, 20)

join_btn = wait.until(EC.element_to_be_clickable((By.XPATH, "//button[text()='Join']")))
join_btn.click()

time.sleep(5)


button = driver.find_element_by_xpath("//h3[text()='Welcome to Shatkora!']/following-sibling::button")
driver.execute_script("arguments[0].click();", button)
 

после этого кода вам придется переключиться на новые окна, что можно сделать с помощью приведенного ниже кода :

 handles = driver.window_handles
driver.switch_to.window(handles[1])