Selenium Web Driver自動(dòng)化測試(java版)系列下半部分(17) - 元素操作 - 表格

這篇討論表格的操作。打開示例網(wǎng)頁webelements.html網(wǎng)頁看里面那個(gè)表格:

通常一個(gè)表格的操作方法如下:

1. 顯示行數(shù)和列數(shù);
2. 顯示總共有幾個(gè)格;
3. 取出表中某個(gè)格里的值。

上圖這個(gè)表很簡單,一看就知道是三行三列。但如果表格很大,記錄又多的情況下就看不出來了,數(shù)得數(shù)半天,眼睛疼,數(shù)一半被打斷了還得罵人,有那功夫還不如寫個(gè)程序計(jì)算一下。先定位該表格,用firebug查看表格的html代碼:

別看只有9個(gè)格,但代碼卻很長。我先簡單講一下表格的結(jié)構(gòu),如果熟悉表格的朋友可以直接跳過,不過其實(shí)也沒多長。表格開始是用<table></table>作標(biāo)記,table英語里就是表格的意思。表格里包括三部分 – 表格頭部(標(biāo)記為thead),表格主體(tbody),表格頁腳(tfoot)。其中最重要的部分就是表格主體。看咱們這個(gè)例子,我沒寫頭和尾,只有主體,這是可以的。再往里看,有兩個(gè)重要標(biāo)記: <tr>和<td>。一對<tr></tr>表示一行,咱們這個(gè)例子里有三對,所以是三行。每一行里都有列,一對<td></td>就表示一列。例子中每一行都有三列,所以組成了三行三列,標(biāo)準(zhǔn)九宮格。表格也遵循“行中有列,先行后列”的原則。記得咱們之前討論的二維數(shù)組嗎?寫角標(biāo)的時(shí)候也是先寫行標(biāo),再寫列標(biāo),a[1]][2]指的就是第二行第三列,一個(gè)道理。

其實(shí)表格還有一些標(biāo)記,建議大家沒事的時(shí)候研究一下,混個(gè)臉熟以后測試時(shí)不陌生。

先說第一個(gè)操作,顯示行數(shù)和列數(shù)。有了以上這點(diǎn)理論就簡單了,找行數(shù)不就是找有多少個(gè)<tr>,找列數(shù)不就找每一行里有多少個(gè)<td>么?演示一下,新建一個(gè)叫SeleniumTable的java項(xiàng)目 -> 包c(diǎn)om.test -> Test.java,添加selenium jar包,把driver聲明配置好,把webelements.html網(wǎng)頁全屏打開。然后求行數(shù)和列數(shù):

求行數(shù)比較簡單,先找出所有的tr,很明顯用tagName最省事。而且注意我用的方法是findElements(),加了個(gè)s,意思是要匹配所有帶<tr>的標(biāo)簽。我寫這句話的目的就是要返回一個(gè)List的接口對象,這個(gè)list里包括所有的行,我給這個(gè)list起個(gè)名叫rows。第二行代碼rows.size()好理解吧?是List本身自帶的方法,求List大小用的,之前也講過。

運(yùn)行程序,打印3。那列呢?原理也是一樣的,但我們不能直接By.tagName(“td”),這么寫會(huì)匹配所有<td>,表格有三行,每行有三列,總共有9個(gè)<td>,你再用columns.size()得到的就是9個(gè),但我們求的是每一行里的列數(shù),應(yīng)該也是3,打印9列就錯(cuò)了。

所以,我們用xpath,去匹配某一個(gè)<tr>下的所有<td>。代碼里我寫的是1,但你也可以寫2和3,畢竟三行里每一行的列數(shù)都是相同的嘛。這樣得到的columns List里的size值就對了,也打印出3。

這是一種方法。但問題來了,如果當(dāng)前頁面上有多個(gè)表格呢?比如你直接寫rows.size()出來267個(gè)<tr>,沒準(zhǔn)這267行屬于好幾個(gè)表呢?那就全錯(cuò)了。這種情況下要么你重新找xpath,把table引進(jìn)來:

如果你嫌這么做麻煩,還可以用第二種方法:既然有好多表,那我就先找到需要的表不就行了?然后用返回的WebElement表格對象替換driver來調(diào)用findElements():

第一步先定位表格,表格里正好有個(gè)id=”automation”,直接用。其實(shí)并不是正好,都是我設(shè)計(jì)的,為了方便。返回一個(gè)叫htmlTable的表格對象,然后調(diào)用findElements()。后邊都一樣了。這種方法直接定位要找的表格,和以前介紹的其它控件操作一樣,都是先找控件,風(fēng)格保持一致。

最后一個(gè)常用操作就是取出某一個(gè)格子里的值,方法還是getText()。這個(gè)例子里缺id少name,用xpath最好,代碼如下,取出所有的值:

我們已經(jīng)練過很多遍getText()了,應(yīng)該很好理解。仔細(xì)看xpath里tr和td的下標(biāo):因?yàn)楸碇械男惺前错樞虼蛴〉模悦恳恍械南聵?biāo)都按順序出現(xiàn)3次;又因?yàn)槊恳恍兄械牧幸彩前错樞虼蛴〉模粤械南聵?biāo)也循環(huán)出現(xiàn)了3次。看到這兒是不是想到某些套路?是不是可以用嵌套循環(huán)呀?省得這么一行一行寫了呀?改良后的代碼就是這樣:

rows2.size()和columns2.size()都等于3,for循環(huán)把rows2.size()作為外循環(huán)的終值,執(zhí)行三次,也就是按順序讀取這三行;columns2.size()是內(nèi)循環(huán)的終值,讀每一行時(shí)都會(huì)把列按順序過一遍并取出格里的值。我們就當(dāng)把嵌套循環(huán)復(fù)習(xí)了一遍。如果你遇到的test case需要你把表內(nèi)的值都打印出來,就用這個(gè)嵌套循環(huán)就可以了。

以上就是表格的基本操作,源代碼在SeleniumTable項(xiàng)目里。

本篇知識點(diǎn)及注意事項(xiàng):
1.一個(gè)表格的操作主要包括顯示行數(shù)和列數(shù),總共有幾個(gè)格,以及取出表中某個(gè)格里的值。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容