我在页面页面工厂中定义了元素
@FindBy(xpath = "//*[contains(@style,'gxt/images/default/tree/loading.gif')]")
WebElement treeLoading;
我想等待这个元素消失,ExpectedConditions不支持invisiblityOfElementLocated(WebElement),有没有更好的方法来编写自定义等待?
答案 0 :(得分:1)
所以,最后我使用流利的等待来找到以下解决方案
protected void waitUntilElementDisappear(final WebElement element){
try{
new FluentWait<WebDriver>(driver)
.withTimeout(10,TimeUnit.SECONDS)
.pollingEvery(10,TimeUnit.SECONDS)
.ignoring(NoSuchElementException.class)
.until(new ExpectedCondition<Boolean>(){
public Boolean apply(WebDriver driver){
return (!element.isDisplayed());
}
}
);
}catch(TimeoutException e){
fail("Time Out On : "+element);
}
}
答案 1 :(得分:0)
令人讨厌的是,pagefactory页面对象不适用于ExpectedConditions。
我使用自定义等待方法(C#/ NUnit)它应该很容易转换为Java:
public void WaitUntilNotVisible(IWebElement pageObject)
{
for (int second = 0; ; second++)
{
if (second >= 15) Assert.Fail("Error: Element still visible");
try
{
if (!pageObject.Displayed) break;
}
catch (Exception)
{ }
Thread.Sleep(1000);
}
}
此方法适用于隐藏Web元素但仍然存在的位置。如果你想等到元素不再存在,那么你需要捕获NoSuchElementException来打破循环。