Próbuję wybrać opcję z listy rozwijanej dla testów kątowych e2e przy użyciu kątomierza.
Oto fragment kodu opcji wyboru:
<select id="locregion" class="create_select ng-pristine ng-invalid ng-invalid-required" required="" ng-disabled="organization.id !== undefined" ng-options="o.id as o.name for o in organizations" ng-model="organization.parent_id">
<option value="?" selected="selected"></option>
<option value="0">Ranjans Mobile Testing</option>
<option value="1">BeaverBox Testing</option>
<option value="2">BadgerBox</option>
<option value="3">CritterCase</option>
<option value="4">BoxLox</option>
<option value="5">BooBoBum</option>
</select>
Próbowałem:
ptor.findElement(protractor.By.css('select option:1')).click();
To daje mi następujący błąd:
Podano nieprawidłowy lub niedozwolony ciąg Informacje o kompilacji: wersja: „2.35.0”, wersja: „c916b9d”, godzina: „2013-08-12 15:42:01” Informacje o systemie: nazwa.os .: „Mac OS X” , os.arch: 'x86_64', os.version: '10 .9 ', java.version:' 1.6.0_65 'Informacje o sterowniku: driver.version: nieznany
Próbowałem też:
ptor.findElement(protractor.By.xpath('/html/body/div[2]/div/div[4]/div/div/div/div[3]/ng-include/div/div[2]/div/div/organization-form/form/div[2]/select/option[3]')).click();
To daje mi następujący błąd:
ElementNotVisibleError: Element nie jest obecnie widoczny i nie można na niego wchodzić z czasem trwania lub limitem czasu polecenia: 9 milisekund Informacje o kompilacji: wersja: „2.35.0”, wersja: „c916b9d”, godzina: „12.08.2013 15:42: 01 'Informacje o systemie: os.name:' Mac OS X ', os.arch:' x86_64 ', os.version: '10 .9', java.version: '1.6.0_65' Identyfikator sesji: bdeb8088-d8ad-0f49-aad9 -82201c45c63f Informacje o sterowniku: org.openqa.selenium.firefox.FirefoxDriver Możliwości [{platforma = MAC, acceptSslCerts = true, javascriptEnabled = true, browserName = firefox, rotatable = false, locationContextEnabled = true, version = 24.0, cssSelCerts = true, javascriptEnabled = true, browserName = firefox, rotatable = false, locationContextEnabled = true, version = 24.0, cssSelectors, databaseEnabled = true, handlesAlerts = true, browserConnectionEnabled = true, nativeEvents = false, webStorageEnabled = true, applicationCacheEnabled = false, takesScreenshot = true}]
Czy ktoś może mi pomóc z tym problemem lub rzucić trochę światła na to, co tutaj robię źle.
źródło
U mnie zadziałało jak urok
Mam nadzieję, że to pomoże.
źródło
ElementFinder
można łączyć łańcuchami, więc możesz to zrobić:element(by.css('.specific-select')).element(by.cssContainingText('option', 'BeaverBox Testing')).click();
Eleganckie podejście polegałoby na stworzeniu abstrakcji podobnej do tego, co inne wiązania języka selenowego oferują po wyjęciu z pudełka (np.
Select
Klasa w Pythonie lub Javie).Zróbmy wygodny wrapper i ukryjmy w nim szczegóły implementacji:
Przykład użycia (zwróć uwagę, jak jest czytelny i łatwy w użyciu):
Rozwiązanie zaczerpnięte z tematu: Wybierz -> abstrakcja opcji .
FYI, utworzyłem żądanie funkcji: Wybierz -> abstrakcja opcji .
źródło
click()
. Dzięki.źródło
Aby uzyskać dostęp do określonej opcji, musisz podać selektor nth-child ():
źródło
W ten sposób dokonałem wyboru.
źródło
Oto jak to zrobiłem:
źródło
waitForAngular()
metody kątomierza .Spróbuj tego, to działa dla mnie:
źródło
Możesz spróbować tej nadziei, że zadziała
źródło
Inny sposób ustawienia elementu opcji:
źródło
Aby wybrać elementy (opcje) z unikalnymi identyfikatorami, jak tutaj:
Używam tego:
źródło
Napisaliśmy bibliotekę, która zawiera 3 sposoby wyboru opcji:
Dodatkową cechą tych funkcji jest to, że czekają na wyświetlenie elementu przed wykonaniem jakiejkolwiek akcji na elemencie
select
.Możesz go znaleźć na npm @ hetznercloud / protractor-test-helper . Dostępne są również czcionki TypeScript.
źródło
Może nie super eleganckie, ale wydajne:
To po prostu wysyła klucz w dół do wybranego selektora, w naszym przypadku używamy modelSelector, ale oczywiście możesz użyć dowolnego innego selektora.
Następnie w moim modelu obiektów strony:
A z testu:
źródło
Problem polega na tym, że rozwiązania, które działają na zwykłych kątowych polach wyboru, nie działają z materiałami kątowymi md-select i md-option używającymi kątomierza. Ten został opublikowany przez innego, ale zadziałał i nie mogę jeszcze skomentować jego postu (tylko 23 punkty rep). Ponadto trochę go wyczyściłem, zamiast browser.sleep, użyłem browser.waitForAngular ();
źródło
element(by.model('selectModel')).click(); element(by.css('md-option[value="searchOptionValue"]')).click();
mdSelectElement.getAttribute('aria-owns').then( function(val) { let selectMenuContainer = element(by.id(val)); selectMenuContainer.element(by.css('md-option[value="foo"]')).click(); } );
Występuje problem z wyborem opcji w Firefoksie, który naprawia hack Droogansa, o którym chcę tutaj wyraźnie wspomnieć, mając nadzieję, że może to zaoszczędzić komuś kłopotów: https://github.com/angular/protractor/issues/480 .
Nawet jeśli twoje testy przechodzą lokalnie w Firefoksie, może się okazać, że zawodzą w CircleCI lub TravisCI lub czymkolwiek innym, czego używasz do CI i wdrażania. Świadomość tego problemu od samego początku zaoszczędziłaby mi dużo czasu :)
źródło
Pomocnik do ustawienia elementu opcji:
źródło
Jeśli poniżej znajduje się lista rozwijana-
Wtedy kod kątomierza może być-
Źródło - https://github.com/angular/protractor/issues/600
źródło
Wybierz opcję według indeksu:
źródło
Poprawiłem nieco rozwiązanie napisane przez PaulLa. Przede wszystkim poprawiłem kod tak, aby był kompatybilny z ostatnim API Protractor. Następnie deklaruję funkcję w sekcji „onPrepare” pliku konfiguracyjnego Protractor jako element członkowski instancji przeglądarki , dzięki czemu można się do niej odwoływać z dowolnej specyfikacji e2e.
źródło
Szukałem w sieci odpowiedzi na pytanie, jak wybrać opcję z menu modelu i użyłem tej kombinacji, która pomogła mi z materiałem Angular.
wygląda na to, że rzucając kod w jednym wierszu, mógł znaleźć element na liście rozwijanej.
To rozwiązanie zajęło dużo czasu. Mam nadzieję, że komuś to pomoże.
źródło
Chcieliśmy użyć eleganckiego rozwiązania używającego materiału angularjs, ale nie zadziałało, ponieważ tak naprawdę nie ma tagów option / md-option w DOM, dopóki nie klikniesz md-select. Więc „elegancki” sposób nie zadziałał dla nas (zwróć uwagę na kanciasty materiał!) Oto, co dla niego zrobiliśmy, nie wiem, czy to najlepszy sposób, ale zdecydowanie działa teraz
Musieliśmy mieć zaznaczone 4 zaznaczenia, a gdy wybór jest otwarty, istnieje nakładka na drodze wyboru następnego wyboru. dlatego musimy poczekać 500 ms, aby upewnić się, że nie będziemy mieć problemów z efektami materialnymi, które nadal działają.
źródło
Inny sposób ustawienia elementu opcji:
źródło
źródło
Możesz wybrać opcje rozwijane według wartości:
$('#locregion').$('[value="1"]').click();
źródło
Oto jak to zrobić za pomocą wartości opcji lub indeksu . Ten przykład jest nieco prymitywny, ale pokazuje, jak robić, co chcesz:
html:
ts:
źródło
źródło
Możemy w tym celu stworzyć niestandardową klasę DropDown i dodać metodę jako:
Ponadto, aby zweryfikować, jaka wartość jest aktualnie wybrana, możemy mieć:
źródło
Poniższy przykład jest najłatwiejszy. Przetestowałem i zdałem w wersji Protractor
5.4.2
Pełny kod
źródło
Jest to prosta odpowiedź w jednym wierszu, w której angular ma specjalny lokalizator, który może pomóc w wyborze i indeksowaniu z listy.
źródło
Wybierz opcję według właściwości CSS
lub
Gdzie locregion (id), organization.parent_id (nazwa modelu) to atrybuty wybranego elementu.
źródło