按钮点击后,Selenium等待AJAX​​请求完成

时间:2016-10-03 23:02:15

标签: java ajax selenium selenium-webdriver

当我填写完表格并点击提交按钮后,我试图等到通话返回,然后检查插入的数据是否出现在我的视图中。

我想弄清楚如何让这个工作。查看页面标记时,它将刷新视图。有没有办法让我做类似的事情:等到WebElement的孩子们改变了?

我原以为我可以坐在父母的视野中,只是在搜索插入的数据之前监视孩子的变化。

我不确定WebDriverWait是否通过在父WebElement上设置某种监听器来完成该任务。

以下是我一直在使用的一些代码:

public WebElement getWebElement(String selector){
  return (new WebDriverWait(driver,5000))
    .until(ExpectedConditions.presenceOfElementLocated(By.cssSelector(selector)));
}

public submitButton(){
  WebElement submit = getWebElement("#mybutton");
  WebElement gridDataParent = getWebElement("#myTable > tbody");

  //Not quite sure how to check for child changes, and start a listener here

  submit.click();

}

我认为必须有一些方法可以监控给定根目录下的变化,不是吗?

按钮提交后,它将进行服务器调用,并在调用后刷新数据集。

2 个答案:

答案 0 :(得分:2)

据我所知,您可能正在等待更新表数据。如果是这样,那么在提交任何数据之前首先计算行数。再次,检查表数据是否增加。

       int numberCountBeforeTableLoad = driver.findElements(By.cssSelector("your table rows locator")).size();//count row number of your desired table before submitting data
       //here submit your data and wait until your table loads with a row count more than previous row count
       WebDriverWait wait = new WebDriverWait(driver, 20);
       wait.until(ExpectedConditions.numberOfElementsToBeMoreThan(By.cssSelector("your table rows locator"), numberCountBeforeTableLoad));

答案 1 :(得分:0)

尝试使用它,这将等到你正在查看的元素出现在DOM

waitForElementPresent(locator)