2017-01-25 5 views
1

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

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

я получить доступ к этому меню, делая это:

metrics_element = driver.find_element_by_xpath("//div[@class='metrics']") 
metrics_element.click() 

Тогда для здравомыслия проверить, я хочу, чтобы увидеть все мои варианты в этом меню, так что я сделать это, согласно документации:

all_options = metrics_element.find_elements_by_tag_name('option') 
for option in all_options: 
    print option.get_attribute('value') 

Это возвращает меня, что я думал, были словари:

{"id": "1", "name": "name_1", "field": "field_1", "service": "service_1" } 
{"id": "2", "name": "name_2", "field": "field_2", "service": "service_1" } 
{"id": "3", "name": "name_3", "field": "field_3", "service": "service_1" } 

Когда я попытался обращающиеся их Dictiona Я был встречен с ошибкой. Как я могу выбрать определенные поля. Например, я хотел бы выбрать, где это было name in ('name_1', 'name_3')? И moreso вообще, как бы я пошел о выборе показателей из этого metrics_element? Благодаря!

Редактировать: Вот HTML этого меню

<div class="select2-container select2-container-multi" id="s2id_metrics" style="width: 400px;"> 
    <ul class="select2-choices"> 
     <li class="select2-search-field">  
      <input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" class="select2-input select2-default" id="s2id_autogen5" style="width: 398px;"> 
     </li> 
    </ul> 
</div> 
+0

Как именно вы пытались получить доступ к этим значения? – Andersson

+0

Я попытался загрузить их в 'simplejson' dict, но он занимает слишком много времени, так как есть много возможных полей. Какой был бы лучший способ получить к ним доступ? –

+0

Я мог просто вручную ввести все эти значения раньше времени. Затем скопируйте их «xpath» из исходного кода, а затем создайте цикл, чтобы выбрать все из них. Должен быть более эффективный путь, чем это, верно? –

ответ

1

Чтобы получить name значение для каждого варианта и выбрать нужный вариант, вы можете использовать следующий код:

import re 

all_options = metrics_element.find_elements_by_tag_name('option') 
for option in all_options: 
    print re.search('(?:(name_\d))',option.get_attribute('value')).group(0) # to get all values 
all_options[0].click() # to select first option 

Update

Если вам нужно отправить некоторые значения для ввода поле, используйте

driver.find_element_by_xpath("//input[@id='s2id_autogen5']").send_keys('some_value') 

Позвольте мне знать, если это не то, что вы хотите

+0

Это дает ошибку, строковые индексы должны быть целыми числами –

+0

Вы можете попробовать использовать 'regexp' как на обновленный ответ – Andersson

+0

@DmitryPolonskiy, настоящий' HTML' немного отличается от примера :) Ваши значения действительно выглядят как 'JSON'? Вам нужно отправить текст в эти поля ввода или просто получить значение? – Andersson

 Смежные вопросы

  • Нет связанных вопросов^_^