Selenium WebDriver与Polymer网站和Shadow root

时间:2016-11-13 09:20:53

标签: java html selenium

在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();

任何人都可以帮我吗?这是非常简单的事情,但不知怎的,我无法弄明白。

1 个答案:

答案 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')来获取所需的元素。

然后你可以点击这个元素,或者发送密钥等等......我已经为这个问题付出了很多努力,现在轮到你了;)