2014-01-16 2 views
0
<input id="Proc#fr#2-1-111" type="text" data-ctrl="JSCtrl" name="fr" style="display: none; background-color: rgb(224, 224, 224); width: 80px;" disabled=""/> 
<select id="Proc#fr#2-1-111" data-ctrl="JSCtrl" name="fr" optionsdict="3,25 cm,4,29.97 cm,5,30 cm" style="border: 1px solid rgb(127, 157, 185); width: 80px;"> 
<select id="Proc#fr#2-1-111" data-ctrl="JSCtrl" name="fr" optionsdict="3,25 cm,4,29.97 cm,5,30 cm,6,50 cm,7,59.94 cm,8,60 cm" style="border: 1px solid rgb(127, 157, 185); display: none; width: 80px;" disabled=""> 

Как обнаружить «выбрать» вариант, когда несколько атрибутов имеют тот же идентификатор

В приведенном выше коде, идентификатор же для ввода, выберите. Мне нужно выбрать значение в select. Можно ли использовать selenium webdriver с помощью python?

+2

"Правильный" решение было бы устранить повторяющиеся коды. – user2864740

+0

html код не может быть изменен. Мне нужно найти опцию выбора с существующим html-кодом – Venu

+0

Этот код не совсем сформирован html. 'Id' не может быть дублирующимся. Вместо фиксации симптома вы должны исправить источник. – RedX

ответ

1

Прежде всего, этот HTML-код плохо сформирован. Следует избегать дублирования идентификаторов. Если у вас нет доступа для изменения исходного кода, обратитесь к своему менеджеру. Разработчики Selenium должны иметь возможность изменять источник, когда это необходимо.

На вопрос о том, как найти элемент с помощью идентификатора объекта в сочетании с тегом стиля, вот как вы можете его достичь.

Использование CSS Selector

driver.find_element_by_css_selector("select[id='Proc#fr#2-1-111']:not([style*='display: none'])") 

Использование XPath

driver.find_element_by_xpath(".//select[@id='Proc#fr#2-1-111' and not(contains(@style, 'display: none'))]") 
+0

Спасибо за обновления. Я попробую решение, данное вами. Согласно HTML-коду, это устаревший код, который меня не может изменить, но я приведу уведомление моего менеджера – Venu