Java Webdriver预期条件失败:正在等待元素不再可见blr

Java Webdriver预期条件失败:正在等待元素不再可见blr,java,selenium,selenium-webdriver,webdriver,Java,Selenium,Selenium Webdriver,Webdriver,我有一个方法,等待css(模态)定位器在屏幕上不可见,在我的一些构建中,我得到以下失败消息 预期条件失败:正在等待不再使用元素 可见:By.cssSelector:。模态体(尝试了6秒,共500次) 毫秒间隔) 生成信息:版本:“3.4.0”,版本:“未知”,时间:“未知” 系统信息:主机:'DEV007',ip:'172.16.2.192',os.name:'Windows Server 2008 R2',os.arch:'amd64',os.version:'6.1',java.versio

我有一个方法,等待css(模态)定位器在屏幕上不可见,在我的一些构建中,我得到以下失败消息

预期条件失败:正在等待不再使用元素 可见:By.cssSelector:。模态体(尝试了6秒,共500次) 毫秒间隔) 生成信息:版本:“3.4.0”,版本:“未知”,时间:“未知” 系统信息:主机:'DEV007',ip:'172.16.2.192',os.name:'Windows Server 2008 R2',os.arch:'amd64',os.version:'6.1',java.version: '1.8.0_131' 驱动程序信息:org.openqa.selenium.chrome.ChromeDriver 功能[{applicationCacheEnabled=false,rotatable=false,mobileEmulationEnabled=false,networkConnectionEnabled=false, chrome={chromedriverVersion=2.29.461591 (62ebf098771772160f391d75e589dc567915b233), userDataDir=C:\Users\GI\AppData\Local\Temp\2\scoped\u dir7780\u 13017}, takesHeapSnapshot=true,pageLoadStrategy=normal, databaseEnabled=false,handlesAlerts=true,hasTouchScreen=false, 版本=58.0.3029.110,平台=XP,浏览器连接启用=false, nativeEvents=true,acceptSslCerts=true,locationContextEnabled=true, WebStorage Enabled=true,browserName=chrome,takesScreenshot=true, javascriptEnabled=true,CSSSelectorEnabled=true, 意外的行为=}] 会话ID:eb353964f7b9bd515e527a795a111bc3

我的方法:

public boolean waitUntilModalDisapears() {
    return this.wait.until(ExpectedConditions.invisibilityOfElementLocated(By.cssSelector(".modal-body")));
}

每次运行代码时,在页面中加载web元素都会有所不同,因此您应该增加web驱动程序等待中的等待时间,并尝试多次运行代码,以确保驱动程序等待加载元素的时间足够长

请尝试以下内容:

 WebDriverWait wait = new WebDriverWait(driver, 40);
 wait.until(ExpectedConditions.invisibilityOfElementLocated(By.cssSelector(".modal-body")));

每次运行代码时,在页面中加载web元素都会有所不同,因此您应该增加web驱动程序等待中的等待时间,并尝试多次运行代码,以确保驱动程序等待加载元素的时间足够长

请尝试以下内容:

 WebDriverWait wait = new WebDriverWait(driver, 40);
 wait.until(ExpectedConditions.invisibilityOfElementLocated(By.cssSelector(".modal-body")));

这种方法没有错,你用对了。 此方法(在C#上)的代码为:

return(Func)(驱动程序=>
{
尝试
{
return!driver.FindElement(定位器)。显示;
}
捕获(无接触元素例外)
{
返回true;
}
捕获(StaleElementReferenceException ex)
{
返回true;
}
});

因此,您的元素可能确实是可见的。尝试增加超时时间,或者在无法查看真实数据时进行屏幕截图,以了解元素是否可见。

此方法没有任何错误,您可以正确使用它。 此方法(在C#上)的代码为:

return(Func)(驱动程序=>
{
尝试
{
return!driver.FindElement(定位器)。显示;
}
捕获(无接触元素例外)
{
返回true;
}
捕获(StaleElementReferenceException ex)
{
返回true;
}
});

因此,您的元素可能确实是可见的。尝试增加超时时间,并可能在无法查看真实数据时截屏,以了解元素是否可见。

为了补充此答案,原始海报版本尝试从其所在的任何类(this.wait…)执行wait语句,如mohamed的示例所示,您需要定义用于检查元素可见性的驱动程序。我不确定为什么原始海报的代码(如图所示)会编译。为了补充这个答案,原始海报的版本尝试从它所在的任何类(this.wait…)执行wait语句,如mohamed的示例所示,您需要定义用于检查元素可见性的驱动程序。我不确定为什么原始海报的代码(如图所示)会被编译。基于stacktrace,我怀疑您使用的是Wait接口的FluentWait实现。我建议您查看定位器
“.modal body”
。您的定位器可能会指向页面中的另一个元素,而您没有等待正确的元素不可见。根据stacktrace,我怀疑您正在使用Wait接口的FluentWait实现。我建议您查看定位器
“.modal body”
。您的定位器可能会指向页面中的另一个元素,而您没有等待正确的元素不可见。