2015-02-11 10 views
20

In una delle mie prove, sto localizzare un elemento utilizzando un CSS selector:"Più di un elemento trovato per locator" avvertimento

element(by.css("ul.nav button")) 

C'è più di un elemento corrispondente alla query, ma, dal momento che ho bisogno solo del primo, sto bene con il selettore.

Il problema è, protractor getta un avvertimento:

ATTENZIONE - più di un elemento trovato per locator By.cssSelector ("tasto ul.nav") - il primo risultato sarà utilizzato

È possibile sopprimere l'avviso? In altre parole, come posso consentire a protractor di essere a conoscenza del problema e di non voler più visualizzare l'avviso?


Utilizzando protractor versione di sviluppo (installata direttamente dal ramo principale).

risposta

37

Prova a modificare:

element.all(by.css("ul.nav button")).first() 

Fondamentalmente, questo dice goniometro che già sapete che c'è più di un elemento, e si desidera solo il primo (come hai detto tu nella tua domanda).

+0

che funziona! Come bonus e per curiosità, però, sarebbe utile sapere se è possibile mettere a tacere l'avvertimento, qualche idea? Grazie. – alecxe

+2

Se ce n'era uno, sarebbe [qui] (https://github.com/angular/protractor/blob/master/docs/referenceConf.js). Non vedo nulla del genere, però, e penso che la ragione sia perché i localizzatori non specifici effettuano test molto fragili. –

+0

Sì, temo di poterlo spegnere solo impostando un appropriato 'logLevel' che, per estensione, disabilita altri avvisi che non sono buoni. Ma sono completamente d'accordo sul tuo ultimo punto, ha senso per me. Grazie ancora per l'aiuto. – alecxe

6

L'avviso è lì per un motivo. Hai legato i tuoi test troppo da vicino ai tuoi dati. Il selettore è troppo generale & dovresti essere più specifico. O dicendo element(by.css("ul.nav button:nth-child(1)")) o scopando la ricerca in modo diverso. Non si suppone che i test del goniometro testino lo stile o il dom, si suppone che stiano testando la logica del business.

+0

Buoni punti, grazie per la partecipazione! – alecxe

+0

Dopo una lunga riflessione, sto votando questa risposta perché: 1) fa un'accusa contro l'OP che, data la semplicità della domanda, è completamente ingiustificata; 2) la soluzione data, sebbene possa funzionare, dipende da una presunta struttura DOM che non è indicata nella domanda; 3) la risposta afferma che la soluzione data ha vantaggi specifici rispetto al codice OP, ma in realtà non presenta questi vantaggi; e 4) al di fuori del campione di codice, la risposta è poco più che non sequitur e sermonizzazione. –

0

Meno codice:

$$("ul.nav button").first() 
Problemi correlati