Java&Selenium处理页面Table以及Table中随机位置的数据

davieyang 2018-12-10 原文

Java&Selenium处理页面Table以及Table中随机位置的数据

一、摘要

前一段时间公司小伙伴刚刚接触自动化,遇到的一个问题,页面新创建的数据保存后,出现在table中的某个位置,并不一定是第一行还是第几行,这种情况下如何去操控它

本篇博文将介绍处理这个问题的一种方式

二、测试代码

    @Test
    public void test_Table() throws Exception {//获取表单,xpath是表单的定位
        WebElement tableElement=driver.findElement(By.xpath("//*[@id='app']/section/section/main/section/div[1]/div[3]/table"));
        //将表单的所有tr放进列表,每个tr是表单的一行,逐行遍历
        List<WebElement> rows=tableElement.findElements(By.tagName("tr"));
        for (int i = 0; i < rows.size(); i++) {
            //将表单的td放进list里,每个td是表单的一列,逐列遍历
            List<WebElement> cols=rows.get(i).findElements(By.tagName("td"));
            for (int j = 0; j < cols.size();) {
                String tdText = cols.get(j).getText();
                sleep(1000);
                System.out.println(tdText +"\t");
                //判断哪行哪列的内容包含字段"mysql01", 如果包含则进行操作
                if(tdText.contains("mysql01")){
                    System.out.println(i+1);
                    System.out.println(j+1);
                    int row = i + 1;
                    //点击mysql01所在行的下拉按钮
                    WebElement dropdown = driver.findElement(By.xpath("//*[@id='app']/section/section/main/section/div[1]/div[3]/table/tbody/tr["+row+"]/td[6]/div/div/span"));
                    dropdown.click();
                }break;
            }
        }

    }

实际上如果页面存在检索功能,完全可以写几步检索操作,让页面只有一条你要的数据,那么它的位置就是固定了,然后再进行操控

三、处理Table的其他方法封装

package util;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import java.util.List;
import java.util.NoSuchElementException;
import static util.WaitElementUtil.sleep;

/*
 * some method of controlling table
 *
 * @author: davieyang
 * @create: 2018-08-05 14:04
 */
public class TableUtil {
    //声明一个WebElement对象,用于存储页面的表格元素对象
    private WebElement _table;

    //为构造函数传入页面表格元素对象参数,调用TableUtil类的settable方法,将页面表格元素赋值给TableUtil类的_table成员变量
    public TableUtil (WebElement table){
        setTable(table);
    }
    //获取页面表格对象的方法
    public WebElement getTable(){
        return _table;
    }
    //将页面表格元素赋值给TableUtil类中_table成员变量的方法
    public void setTable(WebElement _table){
        this._table = _table;
    }
    //获取表格元素的行数,查找表格元素有几个tr元素,有几个tr元素,就可以知道表格有几行,tr数量和表格行数相一致
    public int getRowCount(){
        List<WebElement> tableRows = _table.findElements(By.tagName("tr"));
        return tableRows.size();
    }
    //获取表格元素的列数,使用get(0)从容器中取出表格第一行的元素,查找有几个“td”,td数量和列数一致
    public int getColumnCount(){
        List<WebElement> tableRows = _table.findElements(By.tagName("tr"));
        return tableRows.get(0).findElements(By.tagName("td")).size();
    }
    //获取表格中某行某列的单元格对象
    public WebElement getCell(int rowNo, int colNo)throws NoSuchElementException{
        try{
            List<WebElement> tableRows = _table.findElements(By.tagName("tr"));
            System.out.println("行总数:" + tableRows.size());
            System.out.println("行号:" + rowNo);
            WebElement currentRow = tableRows.get(rowNo - 1);
            List<WebElement> tableCols = currentRow.findElements(By.tagName("td"));
            System.out.println("列总数:" + tableCols.size());
            WebElement cell = tableCols.get(colNo-1);
            System.out.println("列号:" + colNo);
            return cell;
        }catch (NoSuchElementException e){
            throw new NoSuchElementException("没有找到相关元素");
        }
    }
    /**
     * 获得表格中某行某列的单元格中的某个页面元素对象,by参数用于定位某个表格中的页面元素,例如by.xpath("input[@type='text']")可以定义到表格中的输入框
     */
    public WebElement getWebElementInCell(int rowNo, int colNo, By by)throws NoSuchElementException{
        try{
            List<WebElement> tableRows = _table.findElements(By.tagName("tr"));
            //找到表格中的某一行,行号从0开始,例如第三行,则需要进行3-1来获取即“2”
            WebElement currentRow = tableRows.get(rowNo-1);
            List<WebElement> tableCols = currentRow.findElements(By.tagName("td"));
            //找到表格中的某一列,因为也是从0开始,所以要找到第三列,则需要进行3-1来获取即“2”
            WebElement cell = tableCols.get(colNo-1);
            return cell.findElement(by);
        }catch (NoSuchElementException e){
            throw new NoSuchElementException("没有找到相关元素");
        }
    }

    /**
     *
     * @param driver 浏览器驱动
     * @param row 行号
     * @param column 列号
     * @return 函数接受浏览器驱动,表格行数和列数,注意表头行,返回某个cell的值
     */
    public static String tableCell(WebDriver driver, int row, int column) {
        String text = null;
        //avoid get the head line of the table
        row=row+1;
        String xpath="//*[@id='table138']/tbody/tr["+row+"]/td["+column+"]";
        WebElement table=driver.findElement(By.xpath(xpath));
        text=table.getText();
        return text;
    }
}

 

发表于 2018-12-10 22:29 davieyang 阅读() 评论() 编辑 收藏

 

版权声明:本文为davieyang原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/davieyang/p/10099625.html

Java&Selenium处理页面Table以及Table中随机位置的数据的更多相关文章

  1. UML中类图(Class Diagram)的关系整理

    什么是UML类图? 类图显示了一组类、接口、协作以及他们之间的关系。在UML中问题域最终要被逐步转化,通过类来 […]...

  2. Semaphore自白:限流器用我就对了!

    大家好,我是 Semaphore,我的中文名字叫“信号量”,我来自 JUC(java.util.concurr […]...

  3. 【xmind】 使用 Java 生成思维导图

    前言 在日常的工作与学习中,我们经常会使用思维导图这个工具,来把抽象而又无形的思考转换成有形并且具体的图像,是 […]...

  4. 《Effective Java》学习笔记 —— 序列化

        Java的序列化API提供了一个框架,用来将对象编码成一个字节流(序列化,serializing),并 […]...

  5. 【3y】从零单排学Redis【青铜】

    前言 只有光头才能变强 最近在学Redis,我相信只要是接触过Java开发的都会听过Redis这么一个技术。面 […]...

  6. Java 开发, volatile 你必须了解一下

    上一篇文章说了 CAS 原理,其中说到了 Atomic* 类,他们实现原子操作的机制就依靠了 volatile […]...

  7. Java 反射

    一、反射Reflection Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助 […]...

  8. java 多页pdf转化为多张图片

    java 多页pdf转化为多张图片 相关jar包: <dependency> <groupI […]...

随机推荐

  1. B树的进化版—-B+树

    C++为什么叫C plus plus?这是由于C++相当于继承C的语法后,增加了各方面的能力,所扩展出的一种新 […]...

  2. 智慧城市交通的要素:路口监管可视化系统的解决方案

    随着信息时代的发展变迁,荧幕里呈现的智慧城市慢慢出现了在现实生活中,很大程度上便利了日常的管理和维护。在智慧城 […]...

  3. 设计模式-六大设计原则

    设计模式-六大设计原则 1.单一职责原则 一个类,应该只有一个引起变化的原因、只有一个职责。每一个职责都是变化 […]...

  4. xlua中lua对象到c#对象的转型

    lua中的类型 基础类型 #define LUA_TNIL 0 #define LUA_TBOOLEAN 1 […]...

  5. 快速上手项目远程团队协作–CODING(新手向)

    快速上手项目远程团队协作–CODING(新手向) CODING网址:https://e.codin […]...

  6. day51_BOS项目_03

    今天内容安排: 1、解决window窗口bug 2、bos项目整体需求分析(基础设置、取派、中转、路由、报表) […]...

  7. 1000个苹果和10个筐子

    有1000个苹果和10个筐子,筐子的编号为1-10.现要将这1000个苹果放入这10个筐子,要求:(1)从1- […]...

  8. struts2简单入门

    框架是什么,框架有什么作用 框架 实现部分功能的代码. 作用 控制请求和响应. 相对于WEB项目的执行流程 s […]...

展开目录

目录导航