从表值动态生成CSS选择器

时间:2016-06-30 15:14:00

标签: java selenium selenium-webdriver

我们有一个基于大量表格的网站。行中的每个单元格都是可单击的。我正在研究一种通过提供我想要点击的表名和值来动态构建cssSelector信息的方法。我越来越近了(我想)。

使用ToolsQA的练习表,说我想为值"台湾"

建立cssSelector。

它的cssSelector是:.tsc_table_s13 > tbody:nth-child(4) > tr:nth-child(3) > td:nth-child(2)

我正在遍历表格,并且已经成功地使用我指定的值("台湾")进入单元格,但是,我不知道如何获取值它当前所在的行和列。

以下是我目前使用的代码:

driver.get("http://toolsqa.com/automation-practice-table/");

String table = ".tsc_table_s13 > tbody:nth-child(4)";
String cellValue = "Taiwan";

getCell(table, cellValue);

    // Get the cell of a particular value
    public static void getCell(String table, String value) throws IOException{

        // Grab the table 
        WebElement tableName = driver.findElement(By.cssSelector(table)); 

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

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

            // Print the contents of each cell
            for (WebElement cell : cells) {
//              System.out.println(cell.getText());
                if (cell.getText().equals(value))
                {
                    String cellValue = table + " > tr:nth-child(" + row. + ") > td:nth-child(" + cell + ")";
                    System.out.println(cellValue);

                } // end if text equals

            } // end for loop for cells
        } // end for loop for all rows

    } // end getCell function

1 个答案:

答案 0 :(得分:1)

以下是一个快速示例,说明如何使用XPath在表中查找文本并获取对元素的引用。您提供要搜索的文本,并将其插入到XPath中。下面的XPath,搜索包含该文本的TD。这只是一个简单的案例。如果您的表格中有大量重复文字,那么您必须发布一些示例,以便我可以更新代码以将其考虑在内。

String searchText = "China";
driver.get("http://toolsqa.com/automation-practice-table/");
WebElement e = driver.findElement(By.xpath("//td[text()='" + searchText + "']"));
System.out.println(e.getText()); // you can get the text in the cell
System.out.println(e.getAttribute("outerHTML")); // you can get the HTML of the TD
e.click(); // you can click the element also but in this case it won't do anything since it's just a TD with text