今天總結下selenium的下拉選擇框。我們通常會遇到兩種下拉框,一種使用的是html的標簽select,另一種是使用input標簽做的假下拉框。
后者我們通常的處理方式與其他的元素類似,點擊或使用JS等。而對於前者,selenium給了有力的支持,就是Select類。
我們要進行試驗的網站:http://sahitest.com/demo/selectTest.htm
網頁與源碼截圖如下:
1.導入(import)
你可以用以下方式導入:
from selenium.webdriver.support.ui import Select # 或者直接從select導入 # from selenium.webdriver.support.select import Select
- 1
- 2
- 3
這兩種方法沒有本質的區別,你如果去看ui庫,你會發現,它也只是把select import進去。
2.選擇(select)
Select類提供了三種選擇某一選項的方法:
select_by_index(index) select_by_value(value) select_by_visible_text(text)
- 1
- 2
- 3
針對於示例網站中的第一個select框:
<select id="s1Id"> <option></option> <option value="o1" id="id1">o1</option> <option value="o2" id="id2">o2</option> <option value="o3" id="id3">o3</option> </select>
- 1
- 2
- 3
- 4
- 5
- 6
我們可以這樣定位:
from selenium import webdriverd from selenium.webdriver.support.ui import Select driver = webdriver.Firefox() driver.get('http://sahitest.com/demo/selectTest.htm') s1 = Select(driver.find_element_by_id('s1Id')) # 實例化Select s1.select_by_index(1) # 選擇第二項選項:o1 s1.select_by_value("o2") # 選擇value="o2"的項 s1.select_by_visible_text("o3") # 選擇text="o3"的值,即在下拉時我們可以看到的文本 driver.quit()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
以上是三種選擇下拉框的方式,注意:
- index從 0 開始
- value是option標簽的一個屬性值,並不是顯示在下拉框中的值
- visible_text是在option標簽中間的值,是顯示在下拉框的值
3.反選(deselect)
自然的,有選擇必然有反選,即取消選擇。Select提供了四個方法給我們取消原來的選擇:
deselect_by_index(index) deselect_by_value(value) deselect_by_visible_text(text) deselect_all()
- 1
- 2
- 3
- 4
前三種分別於select相對應,第四種是全部取消選擇,是的,你沒看錯,是全部取消。有一種特殊的select標簽,即設置了multiple=”multiple”屬性的select,這種select框是可以多選的,你可以通過多次select,選擇多項選項,而通過deselect_all()來將他們全部取消。
全選?NO,不好意思,沒有全選,不過我想這難不倒你,尤其是看了下面的這幾個屬性。
4.選項(options)
當我們選擇了選項之后,想要看看選擇的是哪項,所選的是否是我想選的,怎么辦?別擔心,Select為你提供了相應的方法(或者應該說是屬性了):
options all_selected_options first_selected_option
- 1
- 2
- 3
上面三個屬性,分別返回這個select元素所有的options、所有被選中的options以及第一個被選中的option。
1 想查看一個select所有的選項
... s1 = Select(driver.find_element_by_id('s1Id')) for select in s1.options: print select.text ...
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
結果:
o1
o2
o3
- 1
- 2
- 3
- 4
一共四項,第一項為空字符串。
2 想查看我已選中的選項
... s4 = Select(driver.find_element_by_id('s4Id')) s4.select_by_index(1) s4.select_by_value("o2val") s4.select_by_visible_text("With spaces") s4.select_by_visilbe_text(" With nbsp") for select in s4.all_selected_options: print select.text ...
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
結果:
o1
o2
With spaces With nbsp
- 1
- 2
- 3
- 4
輸出所有被選中的選項,適合於能多選的框,僅能單選的下拉框有更合適的方法(當然用這種方法也可以)。這里需要注意的是兩種不同空格的選擇:
- 空格’ ‘,這種在以visible_text的方式選擇時,不計空格,從第一個非空格字符開始
- 網頁空格& nbsp;,對於這種以nbsp為空格的選項,在以visible_text的方式選擇時,需要考慮前面的空格,每一個nbsp是一個空格
3 想要查看選擇框的默認值,或者我以及選中的值
... s2 = Select(driver.find_element_by_id('s2Id')) print s2.first_selected_option.text s2.select_by_value("o2") print s2.first_selected_option.text ...
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
結果:
o2
- 1
- 2
第一行輸出默認選項的文本——空字符串”“;第二行輸出選中的選擇的文本——”o2”。
5.總結
-
Select提供了三種選擇方法:
select_by_index(index) ——通過選項的順序,第一個為 0
select_by_value(value) ——通過value屬性
select_by_visible_text(text) ——通過選項可見文本 -
同時,Select提供了四種方法取消選擇:
deselect_by_index(index)
deselect_by_value(value)
deselect_by_visible_text(text)
deselect_all() -
此外,Select提供了三個屬性方法給我們必要的信息:
options ——提供所有的選項的列表,其中都是選項的WebElement元素
all_selected_options ——提供所有被選中的選項的列表,其中也均為選項的WebElement元素
first_selected_option ——提供第一個被選中的選項,也是下拉框的默認值 -
通過Select提供的方法和屬性,我們可以對標准select下拉框進行任何操作,但是對於非select標簽的偽下拉框,就需要用其他的方法了,這個有機會再討論。
--------------------- 作者:huilan_same 來源:CSDN 原文:https://blog.csdn.net/huilan_same/article/details/52246012?utm_source=copy 版權聲明:本文為博主原創文章,轉載請附上博文鏈接!