无法获得表格中的元素数量

时间:2016-04-25 12:31:47

标签: java selenium selenium-webdriver row

我有一个问题是在断言语句中获取表中的行数。 如果在调试中运行,以下代码可以正常工作,但如果我正常运行则会失败。

WebElement table = this.getDriver().findElement(By.className("table"));
int numOfRowBegining = table.findElements(By.tagName("tr")).size();

addTemplate();

table = this.getDriver().findElement(By.className("table"));
int numOfRowAfterAdding =  table.findElements(By.tagName("tr")).size();
assertEquals(numOfRowBegining + 1, numOfRowAfterAdding);

addTemplate()向表中添加一个元素。问题在于numOfRowAfterAdding的值。

我感谢任何帮助

2 个答案:

答案 0 :(得分:0)

  

如果在debug中运行,以下代码可以正常工作。

这是一个重要线索。 在调试模式下,后续命令之间存在延迟,允许加载页面/元素。当您以常规模式运行代码时,您没有这样做。换句话说,这是计时问题,您应该考虑使用WebDriverWait显式等待。

在您的情况下等待的条件并不完全清楚。这取决于addTemplate()函数内发生的事情。如果存在,例如微调器或加载指示器,您可以通过invisibilityOfElementLocated等待它变得不可见。

或者,您也可以编写自定义预期条件,以等待表中的行数大于之前的行数。

答案 1 :(得分:0)

您应该等待表格完全加载。首先找到一个与表加载相关的元素,即仅在表完全加载后才可见的元素,然后使用代码片段:

        WebDriverWait wait = new WebDriverWait(driver, MAXIMUM_TIME_EXPECTED_TO_WAIT);
        wait.until(ExpectedConditions.visibilityOfElementLocated(your_elem));