Table是经常遇到的一个数据展示组件,我们在做自动化测试的时候免不了跟他打交道。这里我们简单说一下如何处理Table这样的组件。
首先还是举个例子,
<html> <head> <title>Table</title> <style> table {border: 1px solid #ccc} </style> </head> <body> <table id = "t"> <th>C1</th><th>C2</th><th>C3</th> <tr> <td>v1</td> <td>v2</td> <td>v3</td> </tr> <tr> <td>k1</td> <td>k2</td> <td>k3</td> </tr> </table> </body> </html>
然后我们演练一下具体的table操作:
require 'watir-webdriver' b=Watir::Browser.new b.goto "........................../tables.html" b.table(:id=>"t").rows #所有的行 b.table(:id=>"t").[](0) #获取第一行 b.table(:id=>"t").[](0).cells #获取第一行的所有单元格 b.table(:id=>"t").[](0).[](0) #获取第一行第一列的单元格 #注意上面列出的都是获取的元素(与其他诸如文本框空间等都有相同的父类)并不是文本 #对于以上所提到的对象,都是从Element继承而来,所以click,enabled?,exists?,fireEvent,flash,focus等方法都直接可以#使用。(这里说明涉及到watir的源码类结构如有兴趣可以自己看一下相关的源码)
上面的方法基本上可以获取Table的所有元素了,当然你会发现table的单元格里面经常存在有相应的控件,比如说checkbox控件,text_field控件等,遇到这样的情况,可以使用层级关系的定位来找到相应的控件
比如说表格的第二行第一列的checkbox,需要选择,可以使用如下代码:
b.table(:id=>"t").[](1).[](0).checkbox set
还要注意,watir中的元素都是从0开始算第一个的,这个与C语言等很多高级语言都比较相似