在Selenium 中自動化Shadow DOM 元素
使用Selenium 進行網頁自動化在與Shadow DOM 元素互動時經常會遇到挑戰,因為它們封裝在主DOM。本文探討了使用 Selenium 4 中新引入的 WebElement.getShadowRoot() 方法來克服此障礙的解決方案。
以前的方法和限制
在 Selenium 4 之前,開發人員依靠深層 CSS 或 JS Executor 方法來存取影子元素。然而,深層 CSS 與最新版本的 Chrome 瀏覽器不相容,而 JS Executor 的廣泛使用變得繁瑣且複雜。
Selenium 4 解:getShadowRoot()
在 Selenium 4 中,WebElement.getShadowRoot() 方法提供了對 Shadow DOM 的直接存取點一個元素。這消除了對複雜解決方法的需要,並提供了一種更有凝聚力和更有效率的互動方法。
用法範例
要擷取嵌套在影子DOM 中的元素,請使用下列語法:
driver.findElement(By.id("parentId")).getShadowRoot().findElement(By.cssSelector("label")).findElement(By.tagName("input"))
在此範例中, 「parentId」表示包含陰影的父元素的ID root,「label」和「input」分別代表所需巢狀元素的CSS 選擇器和標籤名稱。
getShadowRoot() 的局限性
它是需要注意的是,雖然WebElement.getShadowRoot() 提供了對影子DOM 的訪問,但它有一些限制。例如,僅支援某些定位器策略。例如,在 Chrome 中,By.cssSelector() 和 By.className() 可以在影子 DOM 中使用,但 By.id() 和 By.tagName() 會導致 InvalidArgumentException。
以上是Selenium 4 的 `getShadowRoot()` 方法如何簡化 Shadow DOM 元素自動化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!