簡體   English   中英

什么是setElementConverter以及它在Selenium WebDriver中的工作原理?

[英]What is setElementConverter and how does it work in Selenium WebDriver?

我在查找頁面刷新的元素時遇到問題。 現在嘗試在StaleElementReferenceException下面的元素上執行任何StaleElementReferenceException ,並且消息Element is no longer valid

抬頭看這個網址

有上述裁判URL有關的說明

Should you wish to head down this route, the simplest hook point is to call setElementConverter

setElementConverter使用了什么或如何使用? 谷歌搜索了一下,無法找到所述方法的實際實現。

我認為你可能會通過專注於setElementConverter來走錯路。 正如您鏈接文檔頁面所示,如果元素過時,您應該嘗試再次找到該元素。

如果元素已被替換為相同的元素,則有用的策略是再次查找元素。

我想如果你是初學者Selenium用戶,你應該遵循這個建議並停在這里。 嘗試捕獲陳舊元素異常,然后再次找到該元素而不必擔心setElementConverter


如果您正在研究Selenium的更高級行為,或者為了滿足您對setElementConverter的好奇心,那么以下幾行將更重要。

如果您自動執行此操作,請注意您可能會在競爭條件和潛在的瑕疵情況下打開測試。

...

如果您希望沿着這條路線前進,最簡單的掛鈎點就是調用setElementConverter。

文檔說你可能會嘗試寫一些聰明的東西 ,以便自動重復元素的查找 ,但這會導致邋and和競爭條件。 我認為實際上沒有人真的試圖以這種方式克服StaleElementExceptions,因為它復雜而且不穩定,最簡單的解決方案是在你自己的代碼中重新找到元素。

正如@SantiBailors在他的評論中指出的那樣,setElementConverter是RemoteWebDriverprotected方法。

看起來您將擴展RemoteWebDriver並將其他行為注入setElementConverter的“鈎子”,或者提供您自己的JsonToWebElementConverter來更改該行為以自動重試或處理陳舊元素。

你怎么會這樣做,我不確定。 這是我的知識結束的地方,我從來沒有聽說有人接受這個建議掛鈎到setElementConverter 同樣,我想重申一下,這可能不是你想做的事情,而且很可能你只是想在你自己的代碼中再次找到這個元素,這可以通過使用try-更簡單地完成。捕獲StaleElementException並在一些ThreadSleep或WebDriverWait之后再次嘗試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM