我注意到在我正在进行测试的应用程序中,当我单击一个提交按钮时,网格会刷新。我有一个我可以在一个范围内访问的行数,并希望做类似的事情:
(new WebDriverWait(driver, upperTimeoutLimit))
.until(ExpectedConditions.elementChanged(By.cssSelector(mySelector)));
我的目标是查看节点并执行WebDriverWait,直到它以某种方式发生变化,理想情况下是 getText
编辑我正在和@FlorentB谈话,他提到了以下内容:
WebDriverWait wait = new WebDriverWait(driver, upperTimeoutLimit);
WebElement grid = ui.getExternalCommandGrid();
submit.click();
//staleness
System.out.println("about to check for staleness");
wait.until(ExpectedConditions.stalenessOf(grid));
System.out.println("About to check presence of");
wait.until(ExpectedConditions.presenceOfElementLocated(
By.cssSelector(ui.getExternalCommandGridSizeSelector())));
似乎没有通过stalenessOf(网格)部分。我的想法可能是我在点击之前选择网格,运行点击,然后希望它等到它识别出一个变化(也许我需要检查行),然后才能获得下一个拼图。
答案 0 :(得分:1)
等待网格刷新的一种简单方法是等待网格中定位元素的陈旧性:
WebDriverWait wait = new WebDriverWait(driver, 10);
// element in grid
WebElement element = driver.findElement(By.cssSelector(mySelector));
// trigger the reload
button.click();
// waits for the element to become stale
wait.until(ExpectedConditions.stalenessOf(element));
// waits for a new element
element = wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector(mySelector)));
答案 1 :(得分:1)
我最终将其付诸实践的方式如下:
//submit is a button.
//driver is a WebDriver.
//uppderTimeoutLimit is an int, 10000
WebDriverWait wait = new WebDriverWait(driver, upperTimeoutLimit);
WebElement sizeEle = driver.findElement(By.cssSelector(selector));
String beforeCount = sizeEle.getText();
submit.click();
System.out.println("about to wait until change");
wait.until(ExpectedConditions.not(ExpectedConditions.textMatches(
By.cssSelector(selector),
Pattern.compile(beforeCount))));
如果它没有改变它将超时,如果没有改变,它将继续。现在,我唯一能想到的就是说试一试,因为如果它超时,我想要一些人类可读的内容来理解为什么。
答案 2 :(得分:0)
据我所知,selenium中没有像elementChanged这样的选项。你可以用自己的方式做到这一点。首先,在单击提交按钮之前获取网格的行数。然后等待元素的数量大于先前的计数。
//count the grid's row before clicking submit button
int previousRowCount = driver.findElements(By.cssSelector("your selector for row")).size();
//click submit button & wait for grid's row count to be greater than previousRowCount
WebDriverWait wait = new WebDriverWait(driver, 20);
wait.until(ExpectedConditions.numberOfElementsToBeMoreThan(By.cssSelector("your table rows locator"), numberCountBeforeTableLoad));
<强>增加:强>
所有这些方法等待作为参数给出的最大时间量。您无法在无限时间内等待页面/元素加载。在我的一个项目中,有很多数据加载到表中。在排序数据时,表格消失了。所以,我做了一个技巧。首先,我等待表/行的隐形,然后最多可以看到相同的东西,最多5个小时(是的,它实际上是五个小小的!!)。而且,它对我有用。