`
libin0019
  • 浏览: 234451 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

Selenium快速获取前台表格数据

 
阅读更多

在做自动化测试的时候,避免不了校验表格中的数据是否正确,而获取数据又成了一个难题,待测项目前台使用的是Dojo,且个别字段经过转义,无法通用Store直接获取。最开始用的是方法是通过使用WebDriver中的findElements得到行,遍历列,这样做比较慢,想了好长时间终于找到了。代码如下,如果你正在做Selenium自动化测试的开发,大家可以交流一下。

 

方法1:采用dojo.query()方法来取得前台Grid中的数据。优点:速度快

 

String jscode=
" var rownum = dijit.byId(\"" + this.id + "\").getRowManager().getRowCount(); " + //获取当前grid行数
" var headers = dojo.query(\"#"+this.id+" table[class='u-grid-master-header'] " +
		"th[class~='u-grid-hcell'][colSpan='1']\"); " + //获取当前grid列数(无合并列)
" var colnum = headers.length; "+
" var rowdata = []; " +// 行数据
" var cell; " +
" for(var i=0;i<rownum;i++)" +
" {" +
"   var celldata = []; " +// 单元格数据 
"   for(var j=0;j<colnum;j++)" +
    "{" +
    " column = dojo.query(\"#" + this.id + " table[class='u-grid-master-views'] " +
    		"div[class~='u-grid-row'][gridRowIndex='\"+i+\"'] " +
    		"td[class*='u-grid-cell'][idx='\"+j+\"']\"); "+
    " celldata.push(column[0].innerText.replace(/(^\\s*)|(\\s*$)/g, '')); " +//去掉左右两边空格
    "}"+
    " rowdata.push(celldata); " +
" }"+              
"return rowdata;";
List<List<String>> list = (List<List<String>>)((JavascriptExecutor) getDriver()).executeScript(jscode);
 

方法2:使用WebDriver方法。缺点:耗时

 

List<List<String>> list = new ArrayList<List<String>>();
List<String> rowData = null;
List<WebElement> elements1 = null;
List<WebElement> elements2 = null;
for (Integer i = 0, j = this.getRowCount(); i < j; i++)
{
    rowData = new ArrayList<String>();
    elements1 = getDriver().findElements(
            By.xpath("//div[@id='" + this.id + "']//div[contains(@class,'u-grid-row')][@gridRowIndex='" + i
                    + "']"));
    for (WebElement e1 : elements1)
    {
        elements2 = e1.findElements(By.className("u-grid-cell"));
        for (WebElement e2 : elements2)
        {
            rowData.add(e2.getText());
        }
    }
    list.add(rowData);
}
 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics