这篇讨论表格的操作。打开示例网页webelements.html网页看里面那个表格:
通常一个表格的操作方法如下:
1. 显示行数和列数;
2. 显示总共有几个格;
3. 取出表中某个格里的值。
上图这个表很简单,一看就知道是三行三列。但如果表格很大,记录又多的情况下就看不出来了,数得数半天,眼睛疼,数一半被打断了还得骂人,有那功夫还不如写个程序计算一下。先定位该表格,用firebug查看表格的html代码:
别看只有9个格,但代码却很长。我先简单讲一下表格的结构,如果熟悉表格的朋友可以直接跳过,不过其实也没多长。表格开始是用<table></table>作标记,table英语里就是表格的意思。表格里包括三部分 – 表格头部(标记为thead),表格主体(tbody),表格页脚(tfoot)。其中最重要的部分就是表格主体。看咱们这个例子,我没写头和尾,只有主体,这是可以的。再往里看,有两个重要标记: <tr>和<td>。一对<tr></tr>表示一行,咱们这个例子里有三对,所以是三行。每一行里都有列,一对<td></td>就表示一列。例子中每一行都有三列,所以组成了三行三列,标准九宫格。表格也遵循“行中有列,先行后列”的原则。记得咱们之前讨论的二维数组吗?写角标的时候也是先写行标,再写列标,a[1]][2]指的就是第二行第三列,一个道理。
其实表格还有一些标记,建议大家没事的时候研究一下,混个脸熟以后测试时不陌生。
先说第一个操作,显示行数和列数。有了以上这点理论就简单了,找行数不就是找有多少个<tr>,找列数不就找每一行里有多少个<td>么?演示一下,新建一个叫SeleniumTable的java项目 -> 包com.test -> Test.java,添加selenium jar包,把driver声明配置好,把webelements.html网页全屏打开。然后求行数和列数:
求行数比较简单,先找出所有的tr,很明显用tagName最省事。而且注意我用的方法是findElements(),加了个s,意思是要匹配所有带<tr>的标签。我写这句话的目的就是要返回一个List的接口对象,这个list里包括所有的行,我给这个list起个名叫rows。第二行代码rows.size()好理解吧?是List本身自带的方法,求List大小用的,之前也讲过。
运行程序,打印3。那列呢?原理也是一样的,但我们不能直接By.tagName(“td”),这么写会匹配所有<td>,表格有三行,每行有三列,总共有9个<td>,你再用columns.size()得到的就是9个,但我们求的是每一行里的列数,应该也是3,打印9列就错了。
所以,我们用xpath,去匹配某一个<tr>下的所有<td>。代码里我写的是1,但你也可以写2和3,毕竟三行里每一行的列数都是相同的嘛。这样得到的columns List里的size值就对了,也打印出3。
这是一种方法。但问题来了,如果当前页面上有多个表格呢?比如你直接写rows.size()出来267个<tr>,没准这267行属于好几个表呢?那就全错了。这种情况下要么你重新找xpath,把table引进来:
如果你嫌这么做麻烦,还可以用第二种方法:既然有好多表,那我就先找到需要的表不就行了?然后用返回的WebElement表格对象替换driver来调用findElements():
第一步先定位表格,表格里正好有个id=”automation”,直接用。其实并不是正好,都是我设计的,为了方便。返回一个叫htmlTable的表格对象,然后调用findElements()。后边都一样了。这种方法直接定位要找的表格,和以前介绍的其它控件操作一样,都是先找控件,风格保持一致。
最后一个常用操作就是取出某一个格子里的值,方法还是getText()。这个例子里缺id少name,用xpath最好,代码如下,取出所有的值:
我们已经练过很多遍getText()了,应该很好理解。仔细看xpath里tr和td的下标:因为表中的行是按顺序打印的,所以每一行的下标都按顺序出现3次;又因为每一行中的列也是按顺序打印的,所以列的下标也循环出现了3次。看到这儿是不是想到某些套路?是不是可以用嵌套循环呀?省得这么一行一行写了呀?改良后的代码就是这样:
rows2.size()和columns2.size()都等于3,for循环把rows2.size()作为外循环的终值,执行三次,也就是按顺序读取这三行;columns2.size()是内循环的终值,读每一行时都会把列按顺序过一遍并取出格里的值。我们就当把嵌套循环复习了一遍。如果你遇到的test case需要你把表内的值都打印出来,就用这个嵌套循环就可以了。
以上就是表格的基本操作,源代码在SeleniumTable项目里。
本篇知识点及注意事项:
1.一个表格的操作主要包括显示行数和列数,总共有几个格,以及取出表中某个格里的值。
网友评论