2015-02-11 8 views
20

W jednym z moich badań, mam lokalizowanie element za pomocą CSS selector:„Więcej niż jeden element znalezionych dla lokalizatora” ostrzeżenie

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

Jest więcej niż jeden element pasujący do zapytania, ale odkąd Potrzebuję tylko pierwszego, jestem w porządku z selektorem.

Problem polega na tym, protractor generuje ostrzeżenie:

UWAGA - więcej niż jeden element znalezionych dla lokalizator By.cssSelector ("przycisk ul.nav") - pierwszy wynik będzie używany

Czy można wyłączyć ostrzeżenie? Innymi słowy, w jaki sposób mogę powiadomić protractor, że jestem świadomy problemu i nie chcę, aby ostrzeżenie było wyświetlane?


Używanie wersji rozwojowej (instalowanej bezpośrednio z gałęzi głównej).

Odpowiedz

37

Spróbuj to zamiast:

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

Zasadniczo, to mówi kątomierz, które już wiedzą, że nie więcej niż jeden element, a chcesz tylko pierwszy z nich (jak powiedział pan w swoim pytaniu).

+0

To działa! Jednak jako bonus i z ciekawości warto wiedzieć, czy można wyciszyć ostrzeżenie, jakieś pomysły? Dzięki. – alecxe

+2

Jeśli taki był, byłby [tutaj] (https://github.com/angular/protractor/blob/master/docs/referenceConf.js). Nie widzę czegoś podobnego, i myślę, że powodem jest to, że niespecyficzne lokalizatory powodują bardzo delikatne testy. –

+0

Tak, obawiam się, że mogę go wyłączyć tylko ustawiając odpowiednią opcję "logLevel", która z kolei wyłączy inne ostrzeżenia, które nie są dobre. Ale całkowicie zgadzam się z twoim ostatnim punktem, ma dla mnie sens. Dzięki za pomoc ponownie. – alecxe

6

Ostrzeżenie pojawia się z jakiegoś powodu. Zbyt ściśle związałeś swoje testy z danymi. Selektor jest zbyt ogólny. Powinien być bardziej szczegółowy. Albo mówiąc: element(by.css("ul.nav button:nth-child(1)")) lub inaczej ustalając zakres wyszukiwania. Testy kątomierzy nie powinny testować stylu ani domu, powinny testować logikę biznesową.

+0

Dobre rzeczy, dzięki za udział! – alecxe

+0

Po długim zastanowieniu, odrzucam tę odpowiedź, ponieważ: 1) składa oskarżenie przeciwko OP, które, biorąc pod uwagę prostotę pytania, jest całkowicie nieuzasadnione; 2) dane rozwiązanie, choć może działać, zależy od domniemanej struktury DOM, która nie jest określona w pytaniu; 3) odpowiedź twierdzi, że dane rozwiązanie ma określone zalety w stosunku do kodu PO, ale w rzeczywistości nie ma tych zalet; i 4) poza próbką kodu, odpowiedź stanowi niewiele więcej niż niesekwencję i kazanie. –

0

Mniej Kod:

$$("ul.nav button").first() 
Powiązane problemy