2017-01-25 72 views
1

我想從輸入下拉菜單中檢查(SELECT ALL)複選框。我怎麼能這樣做?這是下拉菜單的屏幕截圖。下拉圖標旁邊的字段ID爲rvrMain_ctl00_ctl09_ctl00Python Selenium check全選複選框輸入

enter image description here

到目前爲止,這裏是我的代碼,但不給我好成績。

checkboxes = browser.find_elements_by_xpath("//input[@id='rvrMain_ctl00_ctl09_ctl00']") 
for checkbox in checkboxes: 
    if not checkbox.is_selected(): 
     checkbox.click() 

另一個嘗試,但仍然沒有好結果。

browser.find_element_by_xpath("//input[@id='rvrMain_ctl00_ctl09_ctl00']").click() 

任何幫助將不勝感激。感謝和問候,

阿諾德

編輯

如果我嘗試檢查該字段的元素,這裏是HMTL代碼:

<table cellspacing="0" cellpadding="0"> 
    <tbody> 
     <tr> 
     <td nowrap="nowrap"><span style="font-family:Verdana;font-size:8pt;"><input id="rvrMain_ctl00_ctl09_ctl03_ctl00" name="rvrMain$ctl00$ctl09$ctl03$ctl00" onclick="MVClassrvrMain_ctl00_ctl09.SetAutoPostBackOnHide();MultiValidValuesSelectAll(this, 'rvrMain_ctl00_ctl09_ctl03');" type="checkbox"><label for="rvrMain_ctl00_ctl09_ctl03_ctl00">(Select All)</label></span></td> 
     </tr> 
     <tr> 
     <td nowrap="nowrap"><span style="font-family:Verdana;font-size:8pt;"><input id="rvrMain_ctl00_ctl09_ctl03_ctl01" name="rvrMain$ctl00$ctl09$ctl03$ctl01" onclick="MVClassrvrMain_ctl00_ctl09.SetAutoPostBackOnHide();OnClickMultiValidValue(this, document.getElementById('rvrMain_ctl00_ctl09_ctl03_ctl00'));" type="checkbox"><label for="rvrMain_ctl00_ctl09_ctl03_ctl01">148950&nbsp;-&nbsp;PT.&nbsp;CATUR&nbsp;SENTOSA&nbsp;ADIPRANA&nbsp;-&nbsp;KOTABUMI</label></span></td> 
     </tr> 
     <tr> 
     <td nowrap="nowrap"><span style="font-family:Verdana;font-size:8pt;"><input id="rvrMain_ctl00_ctl09_ctl03_ctl02" name="rvrMain$ctl00$ctl09$ctl03$ctl02" onclick="MVClassrvrMain_ctl00_ctl09.SetAutoPostBackOnHide();OnClickMultiValidValue(this, document.getElementById('rvrMain_ctl00_ctl09_ctl03_ctl00'));" type="checkbox"><label for="rvrMain_ctl00_ctl09_ctl03_ctl02">148961&nbsp;-&nbsp;PT.&nbsp;CATUR&nbsp;SENTOSA&nbsp;ADIPRANA&nbsp;-&nbsp;BANDAR&nbsp;LAMPUNG</label></span></td> 
     </tr> 
     --- the list keeps go on and on--- 
     <tr> 
     <td nowrap="nowrap"><span style="font-family:Verdana;font-size:8pt;"><input id="rvrMain_ctl00_ctl09_ctl03_ctl203" name="rvrMain$ctl00$ctl09$ctl03$ctl203" onclick="MVClassrvrMain_ctl00_ctl09.SetAutoPostBackOnHide();OnClickMultiValidValue(this, document.getElementById('rvrMain_ctl00_ctl09_ctl03_ctl00'));" type="checkbox"><label for="rvrMain_ctl00_ctl09_ctl03_ctl203">320864&nbsp;-&nbsp;PT.&nbsp;LIQUID&nbsp;KENCANA&nbsp;ABADI&nbsp;-&nbsp;NIAS</label></span></td> 
     </tr> 
    </tbody> 
</table> 

我要選擇的複選框標籤爲(Select All)

編輯

至於建議的Dillanm,我修改我的代碼和它的工作。基本上我必須先點擊下拉菜單圖標,然後點擊其中一個複選框。因此,這裏是代碼:

browser.find_element_by_id('rvrMain_ctl00_ctl09_ctl01').click() # this one click on the dropdown menu icon 
browser.find_element_by_id('rvrMain_ctl00_ctl09_ctl03_ctl00').click() # this one click on the checkbox, either uncheck or check 
+0

你能分享的彈出'HTML'? – Andersson

+0

在移動到複選框之前,您是否需要點擊下拉菜單中的向下箭頭按鈕? – NarendraR

+0

您可以嘗試WebDriver支持包中的Select類;看到[這](http://stackoverflow.com/a/28613320/3110529)回答更多細節(不知道它是否會與複選框雖然) – Dillanm

回答

1

你的情況,你缺少的步驟點擊你的元素的down arrow icon所以只需點擊向下箭頭,下拉項目獲得可見的,然後必須執行的檢查選項。

像 -

browser.find_element_by_xpath(down_arrow_icon_xpath).click() 
checkbox = browser.find_element_by_id("rvrMain_ctl00_ctl09_ctl03_ctl00") 
    if not checkbox.is_selected(): 
     checkbox.click() 
+0

當您嘗試點擊列表時,第一行會導致錯誤(使用'find_element'而不是'find_elements')。第二行也會返回'0'元素,因爲在提供的'HTML'代碼中沒有'id ='rvrMain_ctl00_ctl09_ctl00''的輸入字段(但這似乎是OP誤導)。由於目標複選框最初是已知的,因此不需要遍歷所有選項,您可以使用'「(全選)」'來檢查確切的 – Andersson

+0

@Andersson,您是對的,問題是他錯過了點擊向下箭頭圖標。所以我提到了這一點,並匆忙地粘貼了代碼。感謝提醒:) – NarendraR