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();
此代码无效。
我最近遇到了类似的问题,唯一对我有用的解决方案是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')");