Невозможно выбрать элемент из выпадающего списка с помощью selenium webdriver

Мне нужно выбрать элемент из выпадающего списка, используя selenium webdriver в Python. Для этого я проверил полезные сообщения, такие как Выбор значение из раскрывающегося списка с использованием selenium python и https://sqa.stackexchange.com/questions/12029/how-do-i-work-with-dropdowns-in-selenium-webdriver?lq=1.

Элемент, о котором я говорю, показан в следующем блоке:

<div id="dayTab" style="height:20px" class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide">
 <select class="input-small input-thin">
   <option value="2010">2010</option>
   <option value="2011">2011</option>
   <option value="2012">2012</option>
   <option value="2013">2013</option>
   <option value="2014">2014</option>
   <option value="2015">2015</option>
 </select>
</div>

Я пробовал Select():

yearselect = Select(browser.find_element_by_css_selector("select.input-small.input-thin"))
yearselect.select_by_value("2010")

Хотя он находит элемент (что он и делает), я получаю следующую ошибку, которая возникает для второй строки:

Traceback (most recent call last):
File "C:\Users\elek2\workspace\webdriving\src\gotonch.py", line 119, in <module>
yearselect.select_by_value("2010")
File "C:\Python34\lib\site-packages\selenium\webdriver\support\select.py", line 79, in select_by_value
self._setSelected(opt)
File "C:\Python34\lib\site-packages\selenium\webdriver\support\select.py", line 195, in _setSelected
option.click()
File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webelement.py", line 74, in click
self._execute(Command.CLICK_ELEMENT)
File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webelement.py", line 453, in _execute
return self._parent.execute(command, params)
File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 201, in execute
self.error_handler.check_response(response)
File "C:\Python34\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 181, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotVisibleException: Message: element not visible: Element is not currently visible and may not be manipulated
(Session info: chrome=45.0.2454.101)
(Driver info: chromedriver=2.19.346078 (6f1f0cde889532d48ce8242342d0b84f94b114a1),platform=Windows NT 6.1 SP1 x86_64)

Я не уверен, почему это происходит, но я также пытался использовать Click() вместо этого, чтобы «открыть» раскрывающийся список.

yearselect =browser.find_element_by_css_selector("select.input-small.input-thin").click()
yearselect.select_by_value("2010")

и что элементы видны, но тогда я получаю это:

Traceback (most recent call last):
File "C:\Users\elek2\workspace\webdriving\src\gotonch.py", line 118, in <module>
yearselect = browser.find_element_by_css_selector("select.input-small.input-thin").click()
File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webelement.py", line 74, in click
self._execute(Command.CLICK_ELEMENT)
File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webelement.py", line 453, in _execute
return self._parent.execute(command, params)
File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 201, in execute
self.error_handler.check_response(response)
File "C:\Python34\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 181, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotVisibleException: Message: element not visible
(Session info: chrome=45.0.2454.101)
(Driver info: chromedriver=2.19.346078   (6f1f0cde889532d48ce8242342d0b84f94b114a1),platform=Windows NT 6.1 SP1 x86_64)

Почему элемент все еще не виден, если я могу найти раскрывающийся список и выбрать его?

ИЗМЕНИТЬ:

После комментария LINGS я понял, что существует не только один элемент с именем css, которое я ' я использовал.

Я следую за вышеуказанным блоком, но есть еще один блок, на который есть ссылка перед тем, где вместо div id="dayTab"... стоит div id="monthTab"..., который, очевидно, невидим. Как я могу сослаться на вкладку, которую я хочу, там нет идентификатора.


person Helena K    schedule 15.10.2015    source источник
comment
Вы точно знаете, есть ли на странице только один элемент с css select.input-small.input-thin и этот элемент является вашим элементом? Возможно, вы нажимаете на другой выбор, который имеет тот же CSS, и он невидим.   -  person LINGS    schedule 15.10.2015
comment
@LINGS Вы правы, в этом проблема, спасибо. Я отредактирую свой ОП, так как не знаю, как выбрать правильный.   -  person Helena K    schedule 16.10.2015


Ответы (1)


Ведь это было довольно просто, я заменил начальное:

yearselect = Select(browser.find_element_by_css_selector("select.input-small.input-thin"))
yearselect.select_by_value("2010")

с этим:

yearselect = Select(browser.find_element_by_css_selector("#dayTab > select.input-small.input-thin"))
yearselect.select_by_value("2010")

Это всего лишь вопрос поиска правильного CSS (или XPath). В этом могут помочь надстройки Chrome, такие как XPath Helper. Другие советы по селекторам CSS вы можете найти здесь. Рад, что помог другим пользователям избежать таких досадных ошибок.

person Helena K    schedule 16.10.2015