2016-11-08 2 views
0

element(By.xpath(("/html/body/div[2]/div[3]/md-content/md-card/md-card-content/div/div/div/div/md-custom-table/div/md-table-container/table/thead/tr/th[3]/span"))).click();NoSuchElementError: kein solches Element: Element für Winkelmesser kann nicht gefunden werden

das ist Code, ich möchte es funktionieren lassen.

dieser isxpath Pfad, wo i

/html/body/div[2]/div[3]/md-content/md-card/md-card-content/div/div/div/div/md-custom-table/div/md-table-container/table/thead/tr/th[3]/span

diese Fehler

Message: Failed: No element found using locator: By(xpath, /html/body/div[2]/div[3]/md-content/md-card/md-card-content/div/div/div/div/md-custom-table/div/md-table-container/table/thead/tr/th[3]/span) Stack: NoSuchElementError: No element found using locator: By(xpath, /html/body/div[2]/div[3]/md-content/md-card/md-card-content/div/div/div/div/md-custom-table/div/md-table-container/table/thead/tr/th[3]/span) at WebDriverError (/usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/error.js:26:26) at NoSuchElementError (/usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/error.js:241:26) at /usr/lib/node_modules/protractor/built/element.js:717:27 at ManagedPromise.invokeCallback_ (/usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:1379:14) at TaskQueue.execute_ (/usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2913:14) at TaskQueue.executeNext_ (/usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2896:21) at /usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2775:27 at /usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:639:7 at process._tickCallback (internal/process/next_tick.js:103:7)Error at ElementArrayFinder.applyAction_ (/usr/lib/node_modules/protractor/built/element.js:403:27) at ElementArrayFinder._this.(anonymous function) [as click] (/usr/lib/node_modules/protractor/built/element.js:101:30) at ElementFinder.(anonymous function) [as click] (/usr/lib/node_modules/protractor/built/element.js:740:22) at Object. (/home/vegan/hb-productupload/gateway/src/test/javascript/e2e/account/productDashboard/productDashboardControllerSpec.js:36:47) at /usr/lib/node_modules/protractor/node_modules/jasminewd2/index.js:94:23 at new ManagedPromise (/usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:1082:7) at controlFlowExecute (/usr/lib/node_modules/protractor/node_modules/jasminewd2/index.js:80:18) at TaskQueue.execute_ (/usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2913:14) at TaskQueue.executeNext_ (/usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2896:21) at /usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2820:25 From: Task: Run it("should be able to check product dashboard as a cta") in control flow at Object. (/usr/lib/node_modules/protractor/node_modules/jasminewd2/index.js:79:14) at /usr/lib/node_modules/protractor/node_modules/jasminewd2/index.js:16:5 at ManagedPromise.invokeCallback_ (/usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:1379:14) at TaskQueue.execute_ (/usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2913:14) at TaskQueue.executeNext_ (/usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2896:21) at /usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2775:27 From asynchronous test: Error at Suite. (/home/vegan/hb-productupload/gateway/src/test/javascript/e2e/account/productDashboard/productDashboardControllerSpec.js:33:9) at Object. (/home/vegan/hb-productupload/gateway/src/test/javascript/e2e/account/productDashboard/productDashboardControllerSpec.js:8:1) at Module._compile (module.js:413:34) at Object.Module._extensions..js (module.js:422:10) at Module.load (module.js:357:32) at Function.Module._load (module.js:314:12)

1 spec, 1 failure Finished in 13.16 seconds

[15:19:25] I/launcher - 0 instance(s) of WebDriver still running [15:19:25] I/launcher - chrome #01 failed 1 test(s) [15:19:25] I/launcher - overall: 1 failed spec(s) [15:19:25] E/launcher - Process exited with error code 1

So zur gleichen Stelle angeklickt werden, dann ist dies html:

<span translate="" class="ng-scope ng-binding">Number of Products</span> 

diese selecor ist

body > div.site-content > div.layout-column.flex > md-content > md-card > md-card-content > div > div > div > div > md-custom-table > div > md-table-container > table > thead > tr > th.md-column.ng-scope.ng-isolate-scope.flex.md-sort.md-active > span 

Inerestingly für gleiche Spanne, kann diese klicken

dashboardPageObject.element.all(by.css('[md-order-by="count"]')).get(1);.click(); 
      browser.driver.sleep(28); 
      dashboardPageObject.element.all(by.css('[md-order-by="count"]')).get(1);.click(); 

es 2 mal klickt, aber es dosnot 28 Sekunden warten.

Ich interessiere mich nicht Selektor Xpath oder CSS.

zum Beispiel für eine andere

/html/body/div[2]/div[3]/header/md-content/md-tabs/md-tabs-wrapper/md-tabs-canvas/md-pagination-wrapper/md-tab-item[5]/span 

workds dieser

element(by.xpath('/html/body/div[2]/div[3]/header/md-content/md-tabs/md-tabs-wrapper/md-tabs-canvas/md-pagination-wrapper/md-tab-item[5]/span')); 
+1

dass 'sleep() 'Zeit ist in Millisekunden. Sie warten 0.28 Sekunden, nicht 28 Sekunden. – Gunderson

Antwort

4

Erstens, wie ich in den Kommentaren oben erwähnt, die sleep() Timer dauert Millisekunden, nicht Sekunden. Sie warten also nur 0,28 Sekunden mit diesem Befehl. Erweitere es auf 28000, wenn du wirklich 28 Sekunden lang schlafen willst.

Das ist jedoch nicht der beste Ansatz. Sie sollten implizite Wartezeiten in Form von Expected Conditions verwenden, damit Ihre Tests effizient sind und konsistent ausgeführt werden.

Sie müssen entscheiden, welche Methode für Sie am besten geeignet ist, abhängig von der Art des Elements, auf das Sie klicken möchten, aber Sie werden wahrscheinlich am Ende presenceOf() oder verwenden.

presenceOf() wartet etwas auf das DOM angehängt werden

visibilityOf() ein vorhandenes Element nimmt und wartet, um es sichtbar zu sein.

Schließlich Xpath ist kein großer Locator. Es kann jetzt in Ihrem aktuellen Test funktionieren, aber Xpath ist sehr spröde, da es sich im Laufe der Entwicklung leicht ändern kann. Ich würde Ihnen raten, einen anderen Weg zu finden, dieses Element zu lokalisieren, da es nicht viele Attribute an diesem Element sind, würde ich wahrscheinlich cssContainingText()

So Kombination der oben wählen:

var el = element(by.cssContainingText('span', 'Number of Products')); 
var EC = protractor.ExpectedConditions; 
browser.wait(EC.presenceOf(el), 5000); // maximum wait of 5 seconds 
expect(something).toEqual(your expected result); 
+0

element.all (by.css ('[md-order-by = "zaehler"])). Get (1) wie kann das gefunden werden/html/body/div [2]/div [3]/md- content/md-karte/md-karte-inhalt/div/div/div/div/md-benutzerdefinierte-tabelle/div/md-tabelle-container/tabelle/thead/tr/th [4]/span – mark

+1

Es ist unmöglich zu Wenn Sie einen auf diesem XPath basierenden Locator angeben, habe ich keinen Hinweis darauf, was in Ihrer App enthalten ist.Aktualisieren Sie Ihre Frage mit dem HTML – Gunderson

+0

ich erwarte (el.count()). ToEqual (1); um zu sehen, zählen Sie nach Ihrem Code, anstatt etwas zu erwarten, aber es sagt s nicht Funktion – mark

Verwandte Themen