2 回答

TA貢獻1851條經驗 獲得超5個贊
不要混合使用隱式和顯式等待。問題的部分原因是隱式等待通常(但可能并非總是如此?。┰赪ebDriver系統的“遠程”側實現。這意味著它們被“嵌入”到IEDriverServer.exe,chromedriver.exe,安裝在匿名Firefox配置文件中的WebDriver Firefox擴展以及Java遠程WebDriver服務器(selenium-server-standalone.jar)。顯式等待專門在“本地”語言綁定中實現。使用RemoteWebDriver時,事情變得更加復雜,因為您可能同時使用了系統的本地端和遠程端。
這是這樣的工作方式:本地代碼-> Java遠程服務器->遠程服務器上的本地Java語言綁定->“遠程”組件,例如Firefox擴展,chromedriver.exe或IEDriverServer.exe。在網格情況下,它甚至更加復雜,因為它們之間可能還有其他躍點。
因此,當您嘗試混合使用隱式等待和顯式等待時,就會迷失為“未定義行為”。您可能能夠弄清楚該行為的規則是什么,但是隨著驅動程序的實現細節的更改,它們可能會有所更改。所以不要這樣做。
如果您不使用隱式等待,則在找不到元素時不應出現“掛起”現象。驅動程序應立即引發NoSuchElement異常。

TA貢獻1780條經驗 獲得超5個贊
最佳實踐是在每次測試開始時都隱式設置Wait(),并使用WebDriverWait()等待元素或AJAX元素加載。
但是,隱式Wait()和WebDriverWait()在同一測試中不能很好地協同工作。在調用WebDriverWait之前,您必須使implicitlyWait()無效,因為implicitlyWait()還會設置“ driver.findElement()”等待時間。
每當您將WebDriverWait()與hiddenWait()一起使用時,已經設置了一些初始值時,請執行以下步驟-
隱式取消Wait()
執行WebDriverWait(),并返回元素
再次隱式重置Wait()
示例Java代碼-
driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS); //nullify implicitlyWait()
WebDriverWait wait = new WebDriverWait(driver, timeOutInSeconds);
element = wait.until(ExpectedConditions.visibilityOfElementLocated(by));
driver.manage().timeouts().implicitlyWait(DEFAULT_WAIT_4_PAGE, TimeUnit.SECONDS);
- 2 回答
- 0 關注
- 1272 瀏覽
添加回答
舉報