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

在做web自动化的时候,一些元素在shadow-root的节点下,使得selenium中无法通过xpath来定位


shadowDOW

上面所看到的shadow-root标签其实就是一个shadowDOM,那么什么是shadowDOM呢?

他是前端的一种页面封装技术,可以将shadowDOM视为“DOM中的DOM”(可以看成一个隐藏的DOM)

他是一个独立的DOM树,具有自己的元素和样式,与原始文档DOM完全隔离。

shadowDOM必须附在一个HTML元素中,存放shadowDOM的元素,我们可以把它称为宿主元素。在HTML5中有很多的标签样式都是通过shadowDOM来实现的。

比如:日期选择框,音频播放标签,视频播放标签都自带了样式;(这种封装对于前端开发来说虽好,但是我们测试人员在做web自动给的时候就会遇到一些问题,shadowDOM中的标签无法定位。)

操作:

实现步骤:

1.先定位到shadow-root的宿主节点

2.在切换到shadow-root中

3.在选择shadow-root下的标签

js实现代码如下:

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


selenium中通过js实现代码如下:

js ='''return document.evaluate("//*[@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)

你可能感兴趣的:(2021-03-22selenium获取shadow-root下元素)