您应该使用shadowRoot
属性在JavaScript中,而不是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
,所以我们需要这种铸造。
为了只是做你想要什么(点击#影子根中的元素):
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();");
你明白这是怎么回事?每当你需要一个元素(html标签)在shadow-root
下时,你需要使用.shadowRoot
然后querySelector('cssSelector')
来获得你想要的元素。
然后您可以点击这个元素,或发送键将其等......我已经投入了很多的努力,这个问题,现在轮到你了;)
能否请您详细阐述更详细?我没有太多的java脚本。如果你能用上面的例子在这里写下一些代码,那将会很好。谢谢 – keti
我得到这个错误org.openqa.selenium.WebDriverException:未知错误:无法读取属性'querySelector'为空------------------------ ----------------------------- JavascriptExecutor js =(JavascriptExecutor)驱动程序; ---------------------------------------我也可以提供我的网站,如果你希望挖掘更多。 \t \t \t \t \t \t js.executeScript( “返回document.querySelector( 'HTML')shadowRoot.querySelector( '下一个标签')querySelector( 'A')点击()。”); – keti
是的,请添加一个链接。 – Moshisho