2021-03-22selenium獲取shadow-root下元素

在做web自動化的時候,一些元素在shadow-root的節(jié)點(diǎn)下,使得selenium中無法通過xpath來定位


shadowDOW

上面所看到的shadow-root標(biāo)簽其實就是一個shadowDOM,那么什么是shadowDOM呢?

他是前端的一種頁面封裝技術(shù),可以將shadowDOM視為“DOM中的DOM”(可以看成一個隱藏的DOM)

他是一個獨(dú)立的DOM樹,具有自己的元素和樣式,與原始文檔DOM完全隔離。

shadowDOM必須附在一個HTML元素中,存放shadowDOM的元素,我們可以把它稱為宿主元素。在HTML5中有很多的標(biāo)簽樣式都是通過shadowDOM來實現(xiàn)的。

比如:日期選擇框,音頻播放標(biāo)簽,視頻播放標(biāo)簽都自帶了樣式;(這種封裝對于前端開發(fā)來說雖好,但是我們測試人員在做web自動給的時候就會遇到一些問題,shadowDOM中的標(biāo)簽無法定位。)

操作:

實現(xiàn)步驟:

1.先定位到shadow-root的宿主節(jié)點(diǎn)

2.在切換到shadow-root中

3.在選擇shadow-root下的標(biāo)簽

js實現(xiàn)代碼如下:

document.evaluate("http://*[@id='app']/div/header/div[3]/div/div[1]/div/div/input", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.value


selenium中通過js實現(xiàn)代碼如下:

js ='''return document.evaluate("http://*[@id='app']/div/header/div[3]/div/div[1]/div/div/input", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.value'''

return self.driver.execute_script(js)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容