在做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)