如何使用selenium webdriver处理html shadow dom?

问题描述 投票:0回答:1
public WebElement expandShadowRootElement(WebElement element) {
    WebElement shadowRoot = (WebElement) ((JavascriptExecutor)driver)
        .executeScript("return arguments[0].shadowRoot", element);
    return shadowRoot;
}

WebElement root1= driver.findElement(By.xpath("(//div[@id='accordionSearch']//descendant::input[@class='form-control'])[1]"));
WebElement shadowRoot1=expandShadowRootElement(root1);
WebElement element= shadowRoot1.findElement(By.cssSelector("div[id=editing-view-port]/div"));
element.click();

此代码无效。

enter image description here enter image description here

javascript java selenium
1个回答
0
投票

我最近遇到了类似的问题,唯一对我有用的解决方案是javascript。这是我使用的Java代码示例。它从Chrome下载页面的第一个元素中获取<div id="details">并将其另存为WebElement。

WebElement details = (WebElement) ((JavascriptExecutor) driver).
executeScript("return document.querySelector('downloads-manager').
shadowRoot.querySelector('#downloads-list downloads-item').
shadowRoot.querySelector('#content #details')");

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.