5 回答

TA貢獻1811條經(jīng)驗 獲得超5個贊
我遇到了同樣的問題。
顯然 Chrome 會自動更新。昨天(2019 年 10 月 29 日)我的 ChromeDriver 開始抱怨它與 Chrome 78 不兼容。我將驅(qū)動程序更新到 78 版本。當我嘗試查找我確認存在的元素時,我開始收到隨機的 org.openqa.selenium.NoSuchElementException 異常。當我使用斷點時,findElement[s] 也可以工作。我也嘗試過隱式等待,但效果有限。
我嘗試了 zsbappa 的 ChromeOption 解決方案,但沒有任何樂趣。
Google 很難獲取舊版本的 Chrome,但我在https://www.neowin.net/news/google-chrome-76-offline-installer/找到了版本 76 。請注意,在線安裝程序會安裝最新版本。我花了 76 美元回到了司機那里,一切都很好。我所有的 Selenium 測試都恢復正常了。
我的結(jié)論是,Chrome 78 及其相關(guān)驅(qū)動程序存在競爭條件,Selenium 會在網(wǎng)頁完成之前嘗試詢問該網(wǎng)頁。

TA貢獻1796條經(jīng)驗 獲得超7個贊
我們在 Chrome 78.0.3904.7、Chromedriver 77/78、Python Selenium 3.141.0 中也遇到了類似的問題。
在我們的自動化 Python Selenium 測試中,我們發(fā)現(xiàn)了多次失敗,似乎未發(fā)生對元素的點擊。更奇怪的是,該元素似乎已變?yōu)榛顒訝顟B(tài)(就好像即將被單擊一樣),但實際的單擊事件從未發(fā)生。因此,不會發(fā)生頁面切換等導致各種下游故障的情況。
通過反復試驗,我們發(fā)現(xiàn)使用標準 .click() 函數(shù)現(xiàn)在不可靠:
webdriver_element.click()
但使用動作鏈似乎確實可靠:
ActionChains(context.browser).click(webdriver_element).perform()
目前尚不清楚為什么會出現(xiàn)這種情況。當我們升級到 Chrome 78.0.3904.7 后,故障就開始了。我們使用的是 Chromedriver 77.0.3865.90,但相同的測試在 Chrome 77.x 版本上可靠地通過,因此 Chrome 78 中似乎出現(xiàn)了問題或發(fā)生了變化。

TA貢獻1993條經(jīng)驗 獲得超6個贊
我昨天確認,只有當元素包含在 iframe 中時,此問題才會顯現(xiàn)出來。在這些情況下,iframe 的位置很好。但是,嘗試使用驅(qū)動程序或 Web 驅(qū)動程序等待對象來定位 Web 元素將分別產(chǎn)生NoSuchElement
或TimeoutException
。
我向 chromedriver 團隊提供了詳細的 chrome 驅(qū)動程序日志,他們正在處理它。
更新:來自chromedriver 問題 3223
日志顯示,直到 FindElement 返回 null 后,該幀的最終executionContextCreated 才完成。從版本 77 開始,ChromeDriver 在繼續(xù)導航之前停止等待所有幀加載。不幸的是,該更改阻止了等待當前幀加載。第3164章 會全部等待當前幀加載;這應該會阻止 FindElement 進行搜索,直到框架停止加載并創(chuàng)建executionContext。
基本上,這個錯誤是在 v.77 中引入的。我們中的許多人只是注意到這個問題,因為我們從 v.76 升級到了 .v78。有消息稱他們的目標是修復 .v80(而不是 v.79)。Thread.sleep
作為一種解決方法,我在切換到 iframe 和嘗試查找組件之間使用。這個解決方法效果很好。事實上,您只需在調(diào)試模式下運行應用程序即可自行驗證這一點。當您暫停執(zhí)行(通過使用斷點)時,您會發(fā)現(xiàn)原始代碼(沒有睡眠)工作正常。

TA貢獻1874條經(jīng)驗 獲得超12個贊
通過添加以下參數(shù)我已經(jīng)解決了我的問題。
ChromeOptions options = new ChromeOptions(); options.addArguments("--disable-gpu"); options.addArguments("--disable-extensions"); options.setExperimentalOption("useAutomationExtension", false); options.addArguments("--window-size=1920,1080"); options.merge(seleniumCapabilities); driver = new ChromeDriver(options);

TA貢獻1804條經(jīng)驗 獲得超8個贊
我在嘗試訪問 iframe 內(nèi)的選項卡時遇到了同樣的問題,它曾經(jīng)在版本 76 上工作正常?,F(xiàn)在它已更新到 78,它失敗了。嘗試過 waits 、隱式 waits 、 sleep 、使用 xpath、CSS、id 定位元素、 switch context 、滾動直到 view 等,但沒有成功。我使用的是 Windows 10 , 1809。我不知道其他操作系統(tǒng)是否也會發(fā)生這種情況。
添加回答
舉報