Python Selenium: выпадающее меню не работает - PullRequest
1 голос
/ 04 мая 2020

Я пытаюсь выбрать язык из выпадающего меню, которое появляется в виде всплывающего окна на веб-сайте. Я могу найти раскрывающийся элемент, но не могу изменить значение. Я получаю ошибку ElementNotInteractable

Вот мой кусок кода:

lang_div = WebDriverWait(browser,30).until(EC.presence_of_element_located((By.XPATH,"//div[@id='selectLanguage']")))
lang = Select(lang_div.find_element_by_xpath("//select"))
lang.select_by_value('en-US')

Сообщение об ошибке:

ElementNotInteractableException: Сообщение: элемент не взаимодействует
(информация о сеансе: chrome = 81.0.4044.129)

Фактически, во всплывающем окне ничего не кажется интерактивным. Я пытался закрыть всплывающее окно, используя кнопку закрытия, но получаю ту же ошибку. Обратите внимание, что я могу правильно найти элемент, но когда я нажимаю, я получаю ElementNotInteractable

x = lang_div.find_element_by_xpath("//button[@class = 'close']")
x.click()

enter image description here

Ответы [ 2 ]

1 голос
/ 04 мая 2020

Я выполнил следующий код и вижу, что язык меняется.

from selenium.webdriver.support.ui import Select
from selenium import webdriver
import time

path = 'YOUR_GECKODRIVER_PATH'
driver = webdriver.Firefox(path)

driver.get('https://code.org/')

language = "Bosanski"

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH,"/html/body/div[4]/div/div/div[2]/select")))

select = Select(driver.find_element_by_xpath('/html/body/div[4]/div/div/div[2]/select'))

if language != "English":
    select.select_by_visible_text(language)
else:
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH,"//button[text()='Submit']"))).click()

time.sleep(5)

Попробуйте код и скажите мне. Я случайно вставил в качестве опции «Босански» и работал. Спящие части кода предназначены только для проверки работоспособности. Конечно, вы можете стереть их или изменить их по-своему (waitUntil и т. Д.).

1 голос
/ 04 мая 2020

Вы пытались сначала дождаться элемента? Если вам не нужно менять язык на что-то отличное от Engli sh, вам просто нужно что-то вроде:

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH,"//div[@class='modal-dialog']//button[@class = 'close']"))).click()

Вам понадобится следующий импорт:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

Примечание: Я обновил xpath до "//div[@class='modal-dialog']//button[@class = 'close']", чтобы сохранить его уникальным. //button[@class = 'close'] приводит к двум матчам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...