选择下拉菜单下的影子根元素

问题描述 投票:0回答:1

无法使用 selenium Java 选择下拉列表下存在的影子根元素。

尝试过JS路径,但是id不断动态变化,所以无法选择。

document.querySelector("#eds-select").shadowRoot.querySelector("someID > span")

文字可用。

如果有办法通过文本选择下拉菜单,请告诉我。

尝试使用以下解决方案,但使用 WebdriverWrapper 和 RemoteWebElement 获得类转换异常。

Map<String, Object> shadowRootMap = (Map<String, Object>) shadowRoot;
String shadowRootKey = (String) shadowRootMap.keySet().toArray()[0];
String id = (String) shadowRootMap.get(shadowRootKey);
RemoteWebElement remoteWebElement = new RemoteWebElement();
remoteWebElement.setParent((RemoteWebDriver) driver);
remoteWebElement.setId(id);
returnObj = remoteWebElement;

尝试使用以下解决方案,但使用 WebdriverWrapper 和 javascriptExecutor 获得类转换异常。

WebElement shadowHost = seleniumWebDriver.findElement(By.cssSelector("#shadowrootcontainer")); JavascriptExecutor javascriptExecutor = (JavascriptExecutor) seleniumWebDriver; SearchContext shadowRoot = (SearchContext) javascriptExecutor.executeScript("return arguments[0].shadowRoot", shadowHost); WebElement shadowContent = shadowRoot.findElement(By.cssSelector("#shadowcontentcss"));

[这是最新的 chrome 驱动程序] [升级到 selenium 4 不起作用]

任何帮助将不胜感激。 预先感谢。

java selenium-webdriver selenium-chromedriver shadow-dom shadow-root
1个回答
0
投票

您似乎正在尝试使用 Java 中的 Selenium 与下拉列表中的影子 DOM 元素进行交互。处理 Shadow DOM 可能有点棘手,并且根据网页的结构可能需要不同的方法。您可以尝试以下一般方法:

查找父元素:首先,找到包含要与之交互的影子 DOM 的父元素。

执行JavaScript:使用JavaScript获取shadow DOM元素,然后在shadow DOM中定位所需的元素。以下是如何执行此操作的示例:

java 复制代码

// 找到包含shadow DOM的父元素 WebElementparentElement = driver.findElement(By.cssSelector("#eds-select"));

// 使用 JavaScript 获取影子 DOM JavascriptExecutor js = (JavascriptExecutor) 驱动程序; WebElement ShadowRoot = (WebElement) js.executeScript("返回参数[0].shadowRoot",parentElement);

// 现在,在 Shadow DOM 中定位元素 WebElement elementInShadowDOM = ShadowRoot.findElement(By.cssSelector("someID > span"));

// 对元素执行操作 elementInShadowDOM.click(); // 例如点击元素 请记住将“#eds-select”、“someID > span”和操作替换为实际的元素选择器和操作。

如果您仍然遇到转换异常问题,请确保您使用的是彼此兼容的正确版本的 WebDriver 和 ChromeDriver。兼容性问题有时会导致意外错误。

此外,请确保您正在测试的网页的结构没有发生重大变化,因为这也会影响您使用 Selenium 与元素交互的能力。

如果升级到 Selenium 4 不起作用,请考虑使用 ChromeDriver、WebDriver 和 Selenium 的最新兼容版本。您可以查看官方 Selenium 文档和 WebDriver 发行说明以获取兼容性信息。

记住处理异常并添加适当的等待,以使您的 Selenium 测试更加健壮和稳定。

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