我有一个问题是在断言语句中获取表中的行数。 如果在调试中运行,以下代码可以正常工作,但如果我正常运行则会失败。
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的值。
我感谢任何帮助
答案 0 :(得分:0)
如果在debug中运行,以下代码可以正常工作。
这是一个重要线索。 在调试模式下,后续命令之间存在延迟,允许加载页面/元素。当您以常规模式运行代码时,您没有这样做。换句话说,这是计时问题,您应该考虑使用WebDriverWait
显式等待。
在您的情况下等待的条件并不完全清楚。这取决于addTemplate()
函数内发生的事情。如果存在,例如微调器或加载指示器,您可以通过invisibilityOfElementLocated
等待它变得不可见。
或者,您也可以编写自定义预期条件,以等待表中的行数大于之前的行数。
答案 1 :(得分:0)
您应该等待表格完全加载。首先找到一个与表加载相关的元素,即仅在表完全加载后才可见的元素,然后使用代码片段:
WebDriverWait wait = new WebDriverWait(driver, MAXIMUM_TIME_EXPECTED_TO_WAIT);
wait.until(ExpectedConditions.visibilityOfElementLocated(your_elem));