2017-05-17 81 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; 
} 
}); 

所以可能你的元素是可見確實如此。嘗試增加您的超時時間,並可能無法查看真實數據並確定該元素是否可見或不可見時製作屏幕截圖。

相關問題