#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])