不多说先上代码:
package ec.qa.autotest.ui.common.action;
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.StaleElementReferenceException;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindAll;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.ui.SystemClock;
import org.testng.Assert;
import ec.qa.autotest.ui.custom.annotation.PageObject;
import ec.qa.autotest.ui.testbase.TestBase;
@PageObject
public class AdminLoadingProgress {
@FindAll({ @FindBy(xpath = "//body/div") })
private List<WebElement> elementsCol;
private String LOADINGGIF_XPATH = "//body/div[@class='modal-backdrop fade in']";
private String LOADINGGIF_CLASS = "modal-backdrop fade in";
public AdminLoadingProgress() {
PageFactory.initElements(TestBase.getWebDriver(), this);
}
public void wiatForLoadingTOComplete() throws InterruptedException {
Assert.assertEquals(waitForLoadingGIFToDisappear(5000), true);
}
public void wiatForLoadingTOComplete(long timeOut) throws InterruptedException {
Assert.assertEquals(waitForLoadingGIFToDisappear(timeOut), true);
}
/**
* @author xin.wang
* @see 等待loading gif 消失
*/
// 获取所有一级DIV元素
private boolean waitForLoadingGIFToDisappear(long timeOut) throws InterruptedException {
TestBase.getWebDriver().findElement(By.xpath(LOADINGGIF_XPATH));
System.out.println("==页面加载中....==");
SystemClock sc =new SystemClock();
for (WebElement e : elementsCol) {
try {
if (e.getAttribute("class").equals(LOADINGGIF_CLASS)) {
long endTime = sc.laterBy(timeOut);
while (sc.isNowBefore(endTime)) {
if (!elementsCol.contains(e)) {
System.out.println("==页面加载已完成!==");
return true;
}
TimeUnit.MICROSECONDS.sleep(300);
}
return false;
}
} catch (StaleElementReferenceException se) {
System.out.println("==页面元素已过期==");
}
}
System.out.println("==页面加载已完成!==");
return true;
}
}
被测页面在加载数据的时候会向当前DOM中插入一个 DIV[ /body/div[@class='modal-backdrop fade in'] ]块,这个DIV在页面中显示一张GIF图片 用来提示用户 页面正在加载数据,一旦数据加载完成