2016-11-13 64 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