首頁 > Java > java教程 > 如何使用 Selenium 和 CSS 選擇器與 Chrome Shadow DOM 內的元素互動?

如何使用 Selenium 和 CSS 選擇器與 Chrome Shadow DOM 內的元素互動?

DDD
發布: 2024-12-20 08:30:09
原創
952 人瀏覽過

How to Interact with Elements Inside a Chrome's Shadow DOM Using Selenium and CSS Selectors?

使用 Selenium 和 CSS 選擇器清除 Chrome 瀏覽器的瀏覽資料時如何與 #shadow-root (open) 內的元素進行互動?

問題:

嘗試自動與元素互動時在使用Selenium 的「清除瀏覽資料」彈出視窗的#shadow-root (open) 中,您可能會在定位「清除資料」按鈕時遇到挑戰。如果您使用 CSS 選擇器來識別元素,這可能會特別令人沮喪。

解決方案:

成功定位#shadow-root 中的元素並與之互動(開放)使用Selenium,您將需要結合使用JavaScript 執行和對Shadow DOM 的理解。以下是詳細的分步方法:

1.取得Shadow Root:

private static WebElement getShadowRoot(WebDriver driver, WebElement shadowHost) {
    JavascriptExecutor js = (JavascriptExecutor) driver;
    return (WebElement) js.executeScript("return arguments[0].shadowRoot", shadowHost);
}
登入後複製

此方法將shadowHost元素作為參數並傳回對應的shadow root。

2.存取 Shadow 元素:

public static WebElement getShadowElement(WebDriver driver, WebElement shadowHost, String cssOfShadowElement) {
    WebElement shardowRoot = getShadowRoot(driver, shadowHost);
    return shardowRoot.findElement(By.cssSelector(cssOfShadowElement));
}
登入後複製

此方法採用 ShadowHost 元素和 Shadow 元素的 CSS 選擇器,並傳回 Shadow 根中對應的 Shadow 元素。

3.遍歷Shadow DOM(如果有多個層級):

在多個巢狀shadow root的情況下,需要遍歷每個層級才能到達想要的元素。使用以下程式碼遍歷關卡:

// Locate shadowHost on the current dom
WebElement shadowHostL1 = driver.findElement(By.cssSelector("settings-ui"));

// now locate the shadowElement by traversing all shadow levels
WebElement shadowElementL1 = getShadowElement(driver, shadowHostL1, "settings-main");
WebElement shadowElementL2 = getShadowElement(driver, shadowElementL1, "settings-basic-page");
// and so on...
登入後複製

4. JavaScript 執行:

另一種方法是使用 JavaScript 執行直接選取元素。如果遍歷多個陰影等級很複雜或不切實際,這可能很有用。以下是一個範例:

JavascriptExecutor js = (JavascriptExecutor) driver; 
WebElement clearData = (WebElement) js.executeScript("return document.querySelector('settings-ui').shadowRoot.querySelector('settings-main').shadowRoot.querySelector('settings-basic-page').shadowRoot.querySelector('settings-section > settings-privacy-page').shadowRoot.querySelector('settings-clear-browsing-data-dialog').shadowRoot.querySelector('#clearBrowsingDataDialog').querySelector('#clearBrowsingDataConfirm')");
登入後複製

此程式碼將使用 JavaScript 執行檢索 Clear 資料元素,從而顯著簡化遍歷過程。

透過執行這些步驟,您可以有效地與#shadow-root(開啟),同時使用 Selenium 的 CSS 選擇器方法清除 Chrome 瀏覽器中的瀏覽資料。

以上是如何使用 Selenium 和 CSS 選擇器與 Chrome Shadow DOM 內的元素互動?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板