5 回答

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

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

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

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