Селеновые тесты не способны взаимодействовать ни с одним из элементов - PullRequest
0 голосов
/ 12 октября 2018

Итак, я знаю, что когда в настройках Django для DEBUG установлено значение False, Selenium не может получить доступ к статическим файлам, в результате чего получается что-то вроде:

this

Однако, когда я запускаю свои тесты Selenium, они могут взаимодействовать с DOM и выбирать элементы из выпадающего списка!У меня есть тестовый код

from selenium.webdriver import Chrome
from selenium.webdriver.support.ui import Select
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from urllib.parse import urljoin
import time

driver = webdriver.Chrome()
driver.get("localhost:8000/")

time.sleep(3)
driver.find_element_by_id('select-dance').click()
select = Select(driver.find_element_by_xpath('//*[@id="select-dance"]'))
select.select_by_value('1')

driver.find_element_by_id('select-date-range').click()
select = Select(driver.find_element_by_xpath('//*[@id="select-date-range"]')) 
select.select_by_value('1')

driver.find_element_by_id('location').click()

Когда я установил для DEBUG значение True, страница отобразится так, как я хочу, потому что у нее есть доступ к статическим файлам.Но всякий раз, когда я пытаюсь запустить тесты, я всегда получаю сообщение об ошибке

selenium.common.exceptions.ElementNotVisibleException: Message: element not interactable

What the search bar looks like with all of the static files working

Это происходит для любого элемента, на который я ссылаюсь.По какой-то причине, когда я пытаюсь щелкнуть по раскрывающемуся списку напрямую, он всегда выделяет этот ввод, а тег выбора всегда кажется «скрытым», поэтому мне интересно, может ли это быть причиной ошибки See here

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

1 Ответ

0 голосов
/ 13 октября 2018

Ваша страница использует пользовательский компонент выбора, который не является стандартным html поле выбора .В вашем случае они использовали MDBootstrap Select Component , с которым нельзя взаимодействовать с помощью селена Select класс

Вы правы.Вы пытаетесь взаимодействовать с <select> dom, который не виден, и он выбрасывает исключение элемента не видимым.У нас есть два автоматизировать этот случай точно так же, как ручные шаги,

, т. Е.

  1. Нажмите элемент, который трудно поддается.
  2. Подождите, пока не появится раскрывающийся список.
  3. Щелкните значение из раскрывающегося списка.

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

# this is click the input element which is intractable
# Here the input box which contains value 'dance event' is clicked

driver.find_element_by_css_selector('input.select-dropdown[value*="dance event"]').click  

# Then we are waiting for the first value of the dropdown which is not disabled

wait = WebDriverWait(driver, 60)
element = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, 'input.select-dropdown[value*="dance event"]+ul>li:not(.disabled)')))

# Click the element first value of the dropdown

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