2016-11-13 66 views
0

在谷歌浏览器控制台中,我可以通过点击阴影根元素。具有聚合物网站和影子根的Selenium WebDriver

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

您应该使用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')来获得你想要的元素。

然后您可以点击这个元素,或发送键将其等......我已经投入了很多的努力,这个问题,现在轮到你了;)

+0

能否请您详细阐述更详细?我没有太多的java脚本。如果你能用上面的例子在这里写下一些代码,那将会很好。谢谢 – keti

+0

我得到这个错误org.openqa.selenium.WebDriverException:未知错误:无法读取属性'querySelector'为空------------------------ ----------------------------- JavascriptExecutor js =(JavascriptExecutor)驱动程序; ---------------------------------------我也可以提供我的网站,如果你希望挖掘更多。 \t \t \t \t \t \t js.executeScript( “返回document.querySelector( 'HTML')shadowRoot.querySelector( '下一个标签')querySelector( 'A')点击()。”); – keti

+0

是的,请添加一个链接。 – Moshisho