Mam aplikację, która używa KnockoutJS i próbuję napisać kilka testów, które testują formularz. Jeśli nie znasz KnockoutJS, opowiadanie tego jest takie, że zapewnia powiązania z mojego widoku z moim modelem danych. Oznacza to, że po wpisaniu wartości w polu wejściowym mój obiekt bazowy jest automatycznie aktualizowany o tę wartość pól wejściowych. Odbywa się to domyślnie poprzez zmianę zdarzenia.WebDriver: Zmień zdarzenie nie odpalam
Problem polega na tym, że gdy mój test WebDriver wpisuje się w polu, zdarzenie change nie jest uruchamiane, więc mój bazowy model danych nie ma odpowiednich wartości. Powoduje to niepowodzenie sprawdzania poprawności formularza, gdy nie powinien.
Zrobiłem wszystko, co mogłem znaleźć w Internecie, aby to zadziałało. Mam:
- wysłał kartę klucza
- kliknięciu dala od pola formularza
- wysłać kod JavaScript do ognia ostrości i rozmycia zdarzenia (walidacja występuje na rozmycie)
- kliknięciu pola formularza przed wpisaniem
- zestaw czeka tylko okrywać to był problem z synchronizacją
- zmieniły KnockoutJS zaktualizować pole wprowadzania na afterkeydown
Żadne z nich nie sprawdziło się u mnie. Potrzebuję jakiejś pomocy.
Ponadto zweryfikowałem, że nie jest to problem z bąbelkami zdarzeń, ponieważ usunąłem wszystkie inne zdarzenia jawnie, pozostawiając tylko zdarzenie zmiany KnockoutJS.
Rozwiązanie, którego szukam, to takie, które działa dla wszystkich sterowników przeglądarki (... przynajmniej głównych, np. IE, FF, Chrome, Safari) i nie wymaga korzystania z jQuery.
Każda pomoc zostanie bardzo doceniona.
Oto kod względne Używam wpisać wartości w polu:
// find element
WebElement input = this.element.findElement(By.className("controls"))
.findElement(By.tagName("input"));
// to set focus?
input.click();
// erase any existing value (because clear does not send any events
for (int i = 0; i < input.getAttribute("value").length(); i++) {
input.sendKeys(Keys.BACK_SPACE);
}
// type in value
input.sendKeys(text);
// to fire change & blur? (doesnt fire change)
//input.sendKeys(Keys.TAB);
// to fire change & blur? (doesnt fire change)
driver.findElement(By.tagName("body")).click();
Więc jeśli jestem zrozumienie, aktualizuje pola 'input' z każdym naciśnięciu klawisza? – Brian
Proszę mi wybaczyć, że zadałem potencjalnie głupie pytanie, ale czy dana strona działa poprawnie, kiedy ręcznie wchodzisz z nią w przeglądarkę? np. jeśli przeglądasz stronę w przeglądarce, wpisujesz pole tekstowe i tabulator z pola tekstowego, czy model jest aktualizowany? – RodneyTrotter
@ Brian pole wprowadzania jest aktualizowane przez użytkownika. bazowy model danych jest aktualizowany do wartości w polu wejściowym, gdy zdarzenie onchange jest uruchamiane (przynajmniej powinno). A jeśli zmienię wartość bazową w modelu danych, pole wejściowe zostanie automatycznie zaktualizowane do nowej wartości. Wszystko to zapewnia KnockoutJS. – loesak