這篇文章介紹下拉列表。下拉列表長(zhǎng)這樣:
有只可以選擇一個(gè)選項(xiàng)的,也有可以選擇多個(gè)選項(xiàng)的。先說(shuō)只能選一個(gè)的贮庞。該類下拉列表html源代碼是這樣的:
打開示例網(wǎng)頁(yè)webelements.html用firebug定位手機(jī)品牌那個(gè)下拉列表:
介紹操作之前先把準(zhǔn)備工作做好。新建一個(gè)叫SeleniumDropDownListSingle的java項(xiàng)目 -> 包c(diǎn)om.test -> Test.java究西,添加selenium jar包窗慎,把driver聲明配置好,把webelements.html網(wǎng)頁(yè)全屏打開卤材,然后用name定位器寫代碼:
返回一個(gè)下拉列表的對(duì)象遮斥。因?yàn)槭歉謾C(jī)有關(guān),所以起個(gè)名叫mobileDropDownList扇丛。
通常术吗,只可以選擇一個(gè)的下拉列表有以下幾種操作:
1. 檢查是否顯示;
2. 檢查是否啟用帆精;
3. 選擇一個(gè)選項(xiàng);
4. 檢查哪個(gè)被選上了较屿。
前兩個(gè)還是顯示和啟用,其實(shí)幾乎每一個(gè)控件都有這兩種操作:
第三個(gè)是選擇一個(gè)選項(xiàng)卓练,選項(xiàng)可以通過(guò)索引值隘蝎,選項(xiàng)內(nèi)容,以及可見(jiàn)文本三種方法來(lái)選擇:
這三種用哪個(gè)都可以襟企,效果是一樣的嘱么。但是,這些方法都不是用下拉列表對(duì)象mobileDropDownList調(diào)用的顽悼,而是需要用mobileDropDownList先聲明一個(gè)關(guān)于選項(xiàng)的對(duì)象曼振,然后用選項(xiàng)的對(duì)象再調(diào)用几迄。先用索引值示范,上代碼:
運(yùn)行程序冰评,蘋果映胁,三星,紅米三個(gè)值依次被選集索∮煊蓿看見(jiàn)了嗎汇跨?它先用mobileDropDownList作為參數(shù)創(chuàng)建一個(gè)名為mobileOptions的Select對(duì)象务荆,你可以把mobileOptions理解成是一個(gè)對(duì)于選項(xiàng)的對(duì)象。Select這個(gè)類也是Selenium里自帶的穷遂,我不知道它是不是為了迎合下拉列表html源代碼里面那個(gè)Select標(biāo)簽函匕,但大家可以這么記,比較方便蚪黑。select么盅惜,選擇的意思,用來(lái)創(chuàng)建代表選項(xiàng)的對(duì)象忌穿。
Index是索引的意思抒寂,所以selectByIndex()方法的意思就是按照索引來(lái)選擇。這里索引指的是選項(xiàng)的位置:第一個(gè)選項(xiàng)是0掠剑,第二個(gè)是1屈芜,第三個(gè)是2,以此類推朴译。有人估計(jì)已經(jīng)看出來(lái)了井佑,這不就是數(shù)組的感覺(jué)么?沒(méi)錯(cuò)眠寿,就是那感覺(jué)躬翁,也是從0開始。咱們例子中0對(duì)應(yīng)蘋果盯拱,1對(duì)應(yīng)三星盒发,2對(duì)應(yīng)紅米。而且如果你用想找紅米卻寫成了selectByIndex(3)那就肯定拋異常了狡逢。索引作為參數(shù)傳入該方法迹辐,是個(gè)整型的數(shù)據(jù)。
第二個(gè)方法是通過(guò)選項(xiàng)內(nèi)容甚侣,用selectByValue()明吩,也是用Select類的對(duì)象(選項(xiàng)的對(duì)象)mobileOptions來(lái)調(diào)用,參數(shù)就是選項(xiàng)的值殷费,也就是下拉列表html代碼里<option>標(biāo)簽里的value屬性值:
很明顯印荔,參數(shù)應(yīng)該用字符串了低葫,不能再用整型了。而且要注意的是仍律,不是<option></option>之間夾著的那個(gè)文字嘿悬,<option></option>之間夾著的那個(gè)是你刷出網(wǎng)頁(yè)時(shí)顯示的文本,也是咱們第三個(gè)selectByVisibleText()用到的水泉,不是它的value屬性值善涨。雖然這個(gè)例子里它們和屬性值是一樣的,但純屬巧合草则,下一個(gè)例子我保證不這么寫了钢拧。用selectByValue()的代碼如下:
第三個(gè)就是selectByVisibleText(),參數(shù)用的就是<option></option>之間夾著的那些文字炕横,也就是網(wǎng)頁(yè)顯示出來(lái)時(shí)你看見(jiàn)的值:
代碼如下:
再?gòu)?qiáng)調(diào)一遍源内,selectByValue找的是value屬性值,selectByVisibleText找的是<option></option>之間的值份殿,很多人都會(huì)把兩者搞混膜钓,一定注意它們之間的區(qū)別。當(dāng)然卿嘲,你可以沒(méi)事三者混用玩玩:
第四個(gè)操作檢查哪個(gè)被選上了颂斜,用到的方法是連續(xù)調(diào)用getFirstSelectedOption()和getText():
以上就是單項(xiàng)選擇下拉列表的例子,下一個(gè)是關(guān)于多項(xiàng)選擇的拾枣。多項(xiàng)選擇的下拉列表html源代碼和單項(xiàng)只有一個(gè)區(qū)別沃疮,多了一個(gè)multiple=””的屬性:
multiple=””其實(shí)里面并不用給任何值,它本身就起到了一個(gè)標(biāo)識(shí)的作用放前。上面還有一個(gè)size屬性忿磅,指明列表框有多大,同時(shí)可以顯示幾個(gè)選項(xiàng)凭语。你可以隨意調(diào)節(jié)大小葱她,有興趣的朋友可以多研究研究。webelements.html網(wǎng)頁(yè)中的多項(xiàng)下拉列表是關(guān)于興趣愛(ài)好的:
多項(xiàng)下拉列表除了擁有單項(xiàng)下拉列表的所有常規(guī)操作外似扔,還有另外幾個(gè):
1. 檢查是否顯示吨些;
2. 檢查是否啟用;
3. 選擇一個(gè)選項(xiàng)炒辉;
4. 檢查哪個(gè)被選上了豪墅;
5. 檢查是否為多項(xiàng)下拉列表;
6. 選擇多個(gè)選項(xiàng)黔寇;
7. 去掉已選選項(xiàng)偶器。
先看第5種操作,選擇多個(gè)選項(xiàng)。想想就知道屏轰,你可以通過(guò)多次使用selectByIndex()/selectByValue()/selectByVisibleText()來(lái)把好幾個(gè)選項(xiàng)同時(shí)選上颊郎,不會(huì)像單選下拉列表那樣只能有一個(gè)被選。比如我要把上面例子中“足球”和“電影”選上:
第6種操作霎苗,去掉已選選項(xiàng)姆吭。因?yàn)閱雾?xiàng)下拉列表只能選一個(gè)的特點(diǎn),假如你剛選好一個(gè)就后悔了唁盏,本來(lái)應(yīng)該選A結(jié)果選成B了内狸,那直接改成A就行。多項(xiàng)下拉列表不一樣厘擂,本來(lái)應(yīng)該選A我選成B了昆淡,你如果不去掉B選項(xiàng)就直接選擇A結(jié)果就是兩者同時(shí)被選了。所以驴党,去掉已選選項(xiàng)在多項(xiàng)下拉列表中也會(huì)經(jīng)常用到瘪撇。Selenium提供了兩個(gè)方法來(lái)處理获茬。第一種是通過(guò)索引值/選項(xiàng)內(nèi)容/選項(xiàng)文本去掉指定的某一個(gè)選項(xiàng):
既然可以通過(guò)這三者選擇港庄,當(dāng)然也就可以通過(guò)這三者去掉選擇,其實(shí)就是把選擇的方法前面加個(gè)”de”恕曲,select是選擇鹏氧,deSelect是去掉選擇,很好理解佩谣。參數(shù)也一樣把还,index代表位置索引,value代表屬性值茸俭,visibleText代表<option></option>中間的東西吊履。比如我的test case是先把“足球”和“看電影”選上,然后去掉“足球”调鬓,再把“游泳”選上艇炎,代碼就是:
第二種方式是直接干脆全去掉,用deSelectAll():
最后一個(gè)操作是檢查是否為多項(xiàng)下拉列表腾窝,用到的方法是isMultiple()缀踪,一看is開頭的幾乎都是返回布爾類型的,是多項(xiàng)返回true虹脯,是單項(xiàng)返回false:
以上就是下拉列表的操作驴娃,這篇文章的源代碼在SeleniumDropDownListSingle和SeleniumDropDownListMulti兩個(gè)項(xiàng)目中。
本篇知識(shí)點(diǎn)及注意事項(xiàng):
1. 下拉列表可以通過(guò)索引值循集、選項(xiàng)內(nèi)容唇敞、可見(jiàn)文本來(lái)選擇選項(xiàng)。
2. 和單項(xiàng)下拉列表不同,多項(xiàng)下拉列表?yè)Q選項(xiàng)時(shí)要去掉之前的已選選項(xiàng)疆柔。