2017-01-25 43 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')?一般來說,我將如何去選擇這個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'字典中,但是,由於有很多可能的字段,因此它需要太長的時間。訪問它們的最佳方式是什麼? –

+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 

更新

如果您需要發送一些值來輸入字段中,使用

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

讓我知道這是不是你想要

+0

的編輯這給出了一個錯誤,字符串索引必須是整數 –

+0

您可以嘗試使用'regexp'作爲已更新的答案 – Andersson

+0

@DmitryPolonskiy,真正的'HTML'與示例中的有點不同:)你的值真的看起來像一個'JSON'?你是否需要將文本發送到這些「輸入」字段或只是獲取值? – Andersson