今天,在頁面上碰到一個非 select 標簽的下拉框,打算進行定位和模擬選中。 <input aria-invalid="false" autocomplete="disabled" placeholder="請選擇" type="text" class="AABBCC-input DDCC-inp ...
今天,在頁面上碰到一個非 select 標簽的下拉框,打算進行定位和模擬選中。
<input aria-invalid="false" autocomplete="disabled" placeholder="請選擇" type="text" class="AABBCC-input DDCC-inputDDCCcomplete-input AABBcomplete-inputFocused AACC-inputAdornedEnd" aria-autocomplete="list" autocapitalize="none" spellcheck="false" value id="abc-autocomplete-84931">
沒有 <select> 標簽,也沒看到<ul><li>等標簽,無法採用一般方式。
第一個想法是,通過 xpath 定位到 input 後,直接給 value 賦值。結果很顯然,行不通,因為對應選項沒有真正被選中。
上網找了針對隱藏下拉框用 js 來定位的方法,結果也是不盡人意,因為沒有對症下藥。
通過 selenium 錄製一段腳本做參照。但錄製腳本是基於firefox的,頁面元素對應的標簽屬性與chrome不一樣,而我測試對象用的瀏覽器以chrome為主。
但這一圈下來,已經摸清了裡頭的來龍去脈,完全清楚了這個下拉框寫法和其它一般寫法的不同之處。於是根據這個非標準情況,自己寫。
先 find_element_by_xpath 方法定位下拉框按鈕,並模擬單擊,然後再定位其中某選項去選中。由於很多屬性裡面都包含變化的id,只能用contain方法來定位。兩行代碼如下所示:
driver.find_element_by_xpath("//button[@aria-label='Open popup']").click() #模擬點開下拉框
driver.find_element_by_xpath("//li[contains(@id,'option-0')]").click() #模擬選中第一個選項
至此,問題解決。