2016-06-27 15 views
1

Den Versuch, 'jetzt shop', die für den Zugriff auf Taste unter den äußeren Männern Verschleißabschnitt, in https://shop.polymer-project.org/ mit dem folgenden Code auf Chrome-Browser (V51) 's JS-Konsole:Zugriff auf Schatten DOM-Elemente (Polymer) durch Selen javascriptExecutor

document.querySelector('shop-app').shadowRoot.querySelector('shop-home').shadowRoot.querySelector('shop-button'); 

ich das gleiche Element in meinem Automatisierung Test zuzugreifen versucht, Selen verwendet, Linie 1: WebElement shopBtn = (WebElement)((JavascriptExecutor)driver).executeScript("return document.querySelector('shop-app').shadowRoot.querySelector('shop-home').shadowRoot.querySelector('shop-button')");

Linie 2: shopBtn.click();

Dieser Fehlercode gibt:

Exception in thread "main" org.openqa.selenium.WebDriverException: unknown error: Cannot read property 'querySelector' of null 
    (Session info: chrome=51.0.2704.106) 
    (Driver info: chromedriver=2.20.353124 (035346203162d32c80f1dce587c8154a1efa0c3b),platform=Mac OS X 10.11.3 x86_64). 

Jede Hilfe in dieser Hinsicht wird sehr geschätzt.

+0

sollten Sie wahrscheinlich [Polymer DOM api] (https: //www.pol ymer-project.org/1.0/docs/devguide/local-dom#dom-api) – Alan

+0

Verwenden Sie ein schattiges DOM (Standard) oder ein Schatten-DOM in einem Browser, der es nativ unterstützt (Chrome)? –

+0

Ich verwende Chrome, da es Shadow DOM nativ unterstützt. Es funktioniert sehr einfach im Firefox Browser, aufgrund von Polyfills, aber nicht in Chrome, obwohl derselbe Code gut in der JS-Konsole von Chrome Browser funktioniert. – user564769

Antwort

1

Sie haben nicht angegeben, aber es sieht so aus, als ob Sie Java verwenden. Hier ist ein Code, der funktioniert. JSE ist nicht erforderlich.

WebDriver driver = new FirefoxDriver(); 
String searchText = "Men's Outerwear"; 
driver.get("https://shop.polymer-project.org/"); 
WebDriverWait wait = new WebDriverWait(driver, 5); 
List<WebElement> sections = wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.cssSelector("div.item"))); 
for (WebElement section : sections) 
{ 
    if (section.getText().toLowerCase().contains(searchText.toLowerCase())) 
    { 
     section.findElement(By.linkText("SHOP NOW")).click(); 
     break; 
    } 
} 
+0

Es funktioniert auf Firefox-Browser wegen PolyFills, vergessen zu erwähnen, dass :(aber es funktioniert nicht auf Chrome Browser, der native Unterstützung für ShadowDom – user564769

+0

hat Also sagst du, dass der Code oben auf Chrome nicht funktioniert? – JeffC

+0

Das ist richtig, es funktioniert nur mit Firefox und nicht mit Chrome – user564769

-1

Ich triying diesen Klick auszuführen, und ich konnte es mit Firefox tun und mit XPath-Locator

.//shop-button/a[starts-with(@aria-label, 'Men') and contains(@aria-label, 'Outerwear Shop Now')] 

I Selen bin mit 3.

Ich bin nicht sicher, dass ich mit ist der richtige Ansatz

Prost

+0

Willkommen bei Stack Overflow Wenn Sie eine andere Frage haben, fragen Sie sie bitte, indem Sie auf die Schaltfläche [Frage stellen] (// stackoverflow.com/questions/ask) klicken. – GhostCat