如何获取由硒中的特定列值选择的单元格

时间:2018-11-08 14:53:37

标签: java selenium-webdriver

我需要为动态表选择订单ID为#1968的单元格。

我已经使用下面的代码打印了表格,请建议如何获取选择了值#1968的特定单元格?

	WebElement Table_element =commonFunctions.driver.findElement(By.xpath("//*[@id='active']/div/table"));
    	//To locate rows of table. 
    	List < WebElement > rows_table = Table_element.findElements(By.tagName("tr"));
    	//To calculate no of rows In table.
    	int rows_count = rows_table.size();
    	//Loop will execute till the last row of table.
    	for (int row = 0; row < rows_count; row++) {
    	    //To locate columns(cells) of that specific row.
    	    List < WebElement > Columns_row = rows_table.get(row).findElements(By.tagName("td"));
    	    //To calculate no of columns (cells). In that specific row.
    	    int columns_count = Columns_row.size();
    	    System.out.println("Number of cells In Row " + row + " are " + columns_count);
    	    //Loop will execute till the last cell of that specific row.
    	    for (int column = 0; column < columns_count; column++) {
    	        // To retrieve text from that specific cell.
    	    celtext = Columns_row.get(column).getText();
    	        System.out.println("Cell Value of row number " + row + " and column number " + column + " Is " + celtext);
    	   
    		   
    	    }
    	}
    

  

表的结果:第1行中的单元格数是4行的单元格值   数字1和列号0是#1975行号1和1的像元值   列号1是SERVICE1535721248947 FOR $ 156-编辑的服务名称   行号1和列号2的单元格值已传递单元格值   行号1和列号3的表示是11月5日行2中的单元格数量   是第2行和第0列的4个像元值是#1971像元   行号2和列号1的值是service1538918641775单元格   行号2和列号2的值是已传递的单元格的值   行号2和列号3是10月18日行3中的单元格数   是第3行和第0列的4个单元格值是#1969单元格   行号3和列号1的值是service1538918641775单元格   行号3和列号2的值是已传递的单元格值   行号3和列号3是10月18日行4中的单元格数   是行号4和列号0的4个单元格值是#1968单元格   行号4和列号1的值是service1538918641775单元格   行号4和列号2的值是已传递的单元格的值   行号4和列号3是10月18日

HTML的表格:

  <table class="table table-bordered table-hover">
                                                <thead>
                                                <tr>
                                                    <th>Order#</th>
                                                    <th>Title</th>
                                                    <th>Status</th>
                                                    <th>Created</th>
                                                </tr>
                                                </thead>
                                                <tbody>
                                                                                                    <tr class="entry">
                                                        <td class="gig first">
                                                            <div><a href="#">
                                                                    #1983
                                                                    </a>
                                                        </td>
                                                        <td><a href="#">SERVICE1535721248947 FOR $156 - Edited service Name</a></td>
                                                                                                                    <td class="status delivered" ><span class="label mt1 order-label-delivered">Delivered</span></td>
                                                                                                                <td class="datetime last"><div>Nov 11</div></td>
                                                    </tr>
                                                                                                    <tr class="entry">
                                                        <td class="gig first">
                                                            <div><a href="#">
                                                                    #1982
                                                                    </a>
                                                        </td>
                                                        <td><a href="#">SERVICE1535721248947 FOR $156 - Edited service Name</a></td>
                                                                                                                    <td class="status delivered"><span class="label mt1 order-label-delivered">Delivered</span></td>
                                                                                                                <td class="datetime last"><div>Nov 11</div></td>
                                                    </tr>
                                                                                                    
                                                                                                </tbody>
                                            </table>

3 个答案:

答案 0 :(得分:0)

在我当前的项目中,我有应用程序,其中有很多表。我通常将单独的列定义为

List<WebElement> nameColumnList, List<WebElement> statusColumnList

然后,我要遍历“名称”列,搜索具有所需名称的行号。然后,使用该数字,我从“状态”列获取文本并验证其值。这就是我从表中获取所有值并单击或验证它们的方式。

答案 1 :(得分:0)

我不知道我是否理解正确,但是您想遍历表Order Id并找到一个特定的Id。

我该怎么做:

List<WebElement> orders = this.getDriver().findElements(By.xpath("/html/body/table/tbody/tr/td[1]/div/a"));

该代码将检索第一列内部的所有元素,并将其添加到订单列表中。

这样做之后,您可以拥有一个整数索引变量,该变量将跟踪特定元素的行号(如果存在)。

int index = 0; 

for(WebElement elements: orders){
    index++;
   if(elements.text.equals("#1968"){
       //Here you can click on the link or do whatever... 
this.getDriver().findElement(By.xpath("/html/body/table/tbody/tr[index]/td[1]/div/a")).click();
 }

}

我不记得硒的确切语法,但是我知道我遍历了元素列表,并根据我的数据集单击了特定元素。

答案 2 :(得分:0)

// Grab the table 
WebElement table = driver.findElement(By.xpath("//*[@id='content']/table")); 

// Now get all the TR elements from the table 
List<WebElement> allRows = table.findElements(By.tagName("tr")); 

// And iterate over them, getting the cells 
for (WebElement row : allRows) { 
    List<WebElement> cells = row.findElements(By.tagName("td")); 

    for (WebElement cell : cells) {

        if(cell.getText().equals("2010")) {
            String[] ColData = row.getText().split(" ");
            // Split the row text to get the mentioned column details
            System.out.println(ColData[2]);
            System.out.println(ColData[3]);
            System.out.println(ColData[4]);             
        }
        if(cell.getText().equals("Saudi Arabia")) {

            driver.findElement(By.xpath("//*[@id='content']/table/tbody/tr[2]/td[6]/a")).click();

        }
        System.out.println(cell.getText());

    }
}