在Google Chrome控制台中,我可以点击Shadow root元素。
document.querySelector('html /deep/ next-tab').querySelector('a').click()
但我对网络驱动程序java代码做了同样的事情。
这是我的网络驱动程序& java代码。
WebElement result = driver.findElement(By.cssSelector("html /deep/ next-tab")).findElement(By.cssSelector("html /deep/ a");
result.click();
任何人都可以帮我吗?这是非常简单的事情,但不知怎的,我无法弄明白。
答案 0 :(得分:0)
您应该在javascript中使用shadowRoot
属性,而不是deep
已被弃用:
JavascriptExecutor jsExecuter = (JavascriptExecutor)driver;
WebElement result = jsExecuter.executeScript('return arguments[0].shadowRoot', element)
result.click();
argument[0]
是html
的情况。
详细说明:使用WebDriver
,您可以选择在将驱动程序强制转换为执行程序后执行javascript。使用JavascriptExecutor
,您可以直接在页面上运行javascript代码。 Selenium不支持shadowRoot
开箱即用,所以我们需要这个演员。
为了做你想做的事(点击#shadow-root里面的元素):
jsExecuter.executeScript("return document.querySelector('html').shadowRoot.querySelector('next-tab').querySelector('a').click()");
修改:要点击“电子与应用”,您需要:
jsExecuter.executeScript("document.querySelector('next-app').shadowRoot.querySelector('next-app-header').shadowRoot.querySelector('app-header').querySelector('next-nav-bar').shadowRoot.querySelector('div.bar').querySelector('next-tabs > next-tab').click();");
你知道这是怎么回事吗?每当您需要shadow-root
下的元素(html标记)时,您需要使用.shadowRoot
然后querySelector('cssSelector')
来获取所需的元素。
然后你可以点击这个元素,或者发送密钥等等......我已经为这个问题付出了很多努力,现在轮到你了;)