2017-05-17 28 views
0

我有等待的CSS的方法(莫代尔)定位器不显示在屏幕上,在我的一些的构建,我得到以下失败的消息webdriver的预期条件失败:等待元素不再是visiblr

预期条件失败:等待元素不再是 可见:By.cssSelector:.modal-body(尝试了6秒钟,使用500 MILLISECONDS间隔) 构建信息:版本:'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 =假,可旋转=假,mobileEmulationEnabled =假,networkConnectionEnabled =假, 铬= {chromedriverVersion = 2.29.461591 ( 62ebf098771772160f391d75e589dc567915b233) userDataDir = C:\用户\ GI \应用程序数据\本地\温度\ 2 \ scoped_dir7780_13017}, takesHeapSnapshot =真,pageLoadStrategy =正常, databaseEnabled =假,handlesAlerts =真,hasTouchScreen =假, 版本= 58.0 .3029.110,平台= XP,browserConnectionEnabled =假, nativeEvents = TRUE,acceptSslCerts = TRUE,locationContextEnabled = TRUE, webStorageEnabled = TRUE,browserName =铬,takesScreenshot = TRUE, javascriptEnabled = TRUE,cssSelectorsEnabled = TRUE, unexpectedAlertBehaviour =}] 会话ID:eb353964f7b9bd515e527a795a111bc3

我的方法:

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

基于堆栈跟踪,我怀疑你使用的是FluentWait执行等待接口。 我建议你检查你的定位'“.modal体”'。您的定位器可能会指向您网页中的另一个元素,而您并未等待正确元素不可见。 – iamkenos

回答

2

在你的页面加载的网页元素每次运行代码的时间会有所不同所以你应该增加你的网络驱动程序等待的等待时间,并尝试运行你的代码不止一次,以确保您的驱动器已经等待了足够的时间元素加载

试试下面:

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

要添加到这个答案,原来的海报的版本试图执行从它在任何类的等待语句(this.wait ....)作为穆罕默德的例子所示,您需要定义您从中检查司机元素的可见性。我不确定为什么原始海报的代码,如图所示,甚至会编译。 –

0

这种方法没有什么错,你使用它是正确的。 这种方法(在C#)的代码是:

return (Func<IWebDriver, bool>) (driver => 
{ 
try 
{ 
    return !driver.FindElement(locator).Displayed; 
} 
catch (NoSuchElementException ex) 
{ 
    return true; 
} 
catch (StaleElementReferenceException ex) 
{ 
    return true; 
} 
}); 

所以可能你的元素是可见确实如此。尝试增加您的超时时间,并可能无法查看真实数据并确定该元素是否可见或不可见时制作屏幕截图。

相关问题