3 回答

TA貢獻1820條經(jīng)驗 獲得超9個贊
嘗試像這樣定位您的元素:
driver.FindElement(By.CssSelector('selector_otside_shadow_root /deep/ selector_inside_shadow_root'));
在您的情況下,它將是:
driver.FindElement(By.CssSelector('app-home /deep/ #itemName1'));
您可以在chrome://downloads/鏈接中測試此方法css_selector:
downloads-manager /deep/ downloads-item /deep/ [id=file-link]
在開發(fā)工具中。如您所見,需要傳遞兩個shadow-root元素,因此請確保您只有一個shadow-root元素或使用多個元素/deep/,如上例所示。
或者你可以像這樣使用 JavasciptExecutor:
IJavaScriptExecutor js = (IJavaScriptExecutor)_driver;
var element = js.ExecuteScript("return document.querySelector('selector_outside_shadow_root').shadowRoot.querySelector('selector_inside_shadow_root');");
注意:據(jù)我所知,第一個建議僅適用于 Chrome,如果您想要跨瀏覽器解決方案 - 使用第二個。

TA貢獻1963條經(jīng)驗 獲得超6個贊
您可以創(chuàng)建一個方法,它接受 ShadowDom 根定位器列表,并構(gòu)建 js 腳本來執(zhí)行和獲取陰影元素:
public static IWebElement GetElementFromShadowDom(this IWebDriver driver, params string[] selectors)
{
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
var scriptString = "return document.querySelector";
var selectorIndex = 0;
var stopIndex = selectors.Length - 1;
foreach (var selector in selectors)
{
var root = "('" + selector + "')";
root += (selectorIndex != stopIndex && selectors.Length != 1) ? ".shadowRoot.querySelector" : null;
selectorIndex++;
scriptString += root;
}
var webElement = (IWebElement)js.ExecuteScript(scriptString);
return webElement;
}
}

TA貢獻2012條經(jīng)驗 獲得超12個贊
我有同樣的問題。我發(fā)現(xiàn)了一些值
Inspect -> Properties -> value (it can be something else)
嘗試:
WebElement element = driver.findElement(By.cssSelector("div"));
System.out.println(element.getAttribute("value"));
- 3 回答
- 0 關(guān)注
- 424 瀏覽
添加回答
舉報