繁体   English   中英

我无法使用Java在Selenium WebDriver中的动态表格单元格中单击链接

[英]I can't click a link in a dynamic table cell in Selenium WebDriver using Java

我的项目有一个动态表。 我需要转到特定的单元格,然后单击可用链接。 我已到达特定的单元格,但无法单击表格单元格中出现的链接。

@Test(priority = 1)
public void projectDelete() throws Exception {
    int rowCount = -1;
    int columnCount = 0;
    WebElement table = webdriver.findElement(By.id("projectList"));
    List<WebElement> allRows = table.findElements(By.tagName("tr"));
    for (WebElement row : allRows) {
        rowCount++;
        List<WebElement> rowCells = row.findElements(By.tagName("td"));
        for (WebElement cell : rowCells) {
            columnCount++;

            String projectName = cell.getText();

            if (projectName.equals("TEST1")) {
                System.out.println("Table Data" + cell.getText());
                System.out.println("Table Row " + rowCount);

                System.out.println("TEST PROJECT LINE FOUND ..... "
                        + rowCount);

                webdriver.findElement(By.xpath("//*[@id='projectList']/tbody/tr[rowCount]/td[5]")).click();
                webdriver.findElement(By.xpath("//*[@id='493']")).click();
            }
        }
        columnCount = 0;
    }
}

输出:

Table DataTEST1
Table Row 76
TEST PROJECT LINE FOUND ..... 76
FAILED: projectDelete
org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"xpath","selector":"//*[@id='projectList']/tbody/tr[rowCount]/td[5]"}
Command duration or timeout: 20.06 seconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html

通过您的代码,我发现了以下问题

改变以下

webdriver.findElement(By.xpath("//*[@id='projectList']/tbody/tr[rowCount]/td[5]")).click();

webdriver.findElement(By.xpath("//*[@id='projectList']/tbody/tr["+rowCount+"]/td[5]")).click();

再次考虑,我对您的代码提出了一些建议:

  1. 无需查找整个表,而是可以找到正文,因为被测数据位于此处。
  2. 我相信,您知道项目名称在哪一列。 因此,您可以避免循环遍历List rowCells的循环。 相反,您可以直接使用rowCells.get(index)获取确切的列(索引从0开始。如果您的项目名称在第2列中,则index = 1)。
  3. 这同样适用于包含click()链接的列。 使用rowCell.get(index)获取列,然后单击它。

因此,您的代码可以如下修改:

@Test(priority = 1)
public void projectDelete() throws Exception {
    //find tbody
    WebElement table = webdriver.findElement(By.xpath("/table[@id='projectList']/tbody"));

    //get all rows
    List<WebElement> allRows = table.findElements(By.tagName("tr"));

    //iterate through the rows
    for (WebElement row : allRows) {
            //get the rowCells in each row
            List<WebElement> rowCells = row.findElements(By.tagName("td"));

            //get the column which contains the project name and get text
            String projectName = rowCells.get(indexofColumnwhichhasProjectname).getText();

            //Compare if the project name equals TEST1
            if (projectName.equals("TEST1")) {
                System.out.println("Table Data : " + projectName);
                System.out.println("Table Row : " + rowCells.indexOf(projectName));

                //get the column containing the link and click on it.
                rowCells.get(4).click();

                //webdriver.findElement(By.id("493")).click();
                //Img is contained within the row containing the project Name
                //So, find the Img in the row and click
                row.findElements(By.cssSelector("img[alt='Delete Project']")).click();                }
    }
}

让我知道这是否对您有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM