查看ExpectedConditions类,尝试查找onChange

时间:2016-10-04 16:01:11

标签: java selenium selenium-webdriver

我注意到在我正在进行测试的应用程序中,当我单击一个提交按钮时,网格会刷新。我有一个我可以在一个范围内访问的行数,并希望做类似的事情:

(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(网格)部分。我的想法可能是我在点击之前选择网格,运行点击,然后希望它等到它识别出一个变化(也许我需要检查行),然后才能获得下一个拼图。

3 个答案:

答案 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个小时(是的,它实际上是五个小小的!!)。而且,它对我有用。