Cucumber & Selenium: Problem z wpisywaniem nieczego w input

Test aplikacji z JSem, w której zmienia się coś przy pisaniu tekstu do inputa (zdarzenie keyup). Wszystko chodzi świetnie aż dochodzi do sytuacji, gdy czyście się inputa, poprzez:

When I fill in "example[presence]" with ""

Nie ma tam zdarzenia keyup, bo cfaniaczek selenium nie musi tam wpisać żadnego znaczka, czyli użyć klawiatury nie musi, bo jest o tyle sprytniejszy od człowieka, że nie musi też używać backspace’a, żeby usunąć poprzednią treść. Jak w związku z tym zmusić cholerę, aby wywołał jakoś zdarzenie keyup?

[quote=Piotr Misiurek]Test aplikacji z JSem, w której zmienia się coś przy pisaniu tekstu do inputa (zdarzenie keyup). Wszystko chodzi świetnie aż dochodzi do sytuacji, gdy czyście się inputa, poprzez:

When I fill in "example[presence]" with ""

Nie ma tam zdarzenia keyup, bo cfaniaczek selenium nie musi tam wpisać żadnego znaczka, czyli użyć klawiatury nie musi, bo jest o tyle sprytniejszy od człowieka, że nie musi też używać backspace’a, żeby usunąć poprzednią treść. Jak w związku z tym zmusić cholerę, aby wywołał jakoś zdarzenie keyup?[/quote]
Użyj javascriptu, w jQuery jest trigger. Najlepiej napisz krok, który będzie w javascripcie wpisywał po jednej literze i uruchamiał wymagany event.

Znalezione na pivotal labs:

[code]# wrzuc do jakiegos pliku w features/support/
module SeleniumHelpers

Execute JavaScript in the context of your Selenium window

def run_javascript(javascript)
driver.get_eval <<-JS
(function() {
with(this) {
#{javascript}
}
}).call(selenium.browserbot.getCurrentWindow());
JS
end

private

If running in regular Selenium context, get_eval is defined on self.

def driver
respond_to?(:selenium) ? send(:selenium) : self
end
end

include SeleniumHelpers[/code]

# można użyć np: lock = run_javascript <<-JS var isLocked = false; if($ && $.fn && $.fn.isLocked) { isLocked = $("body").isLocked(); } return isLocked; JS

Za pomocą JS próbowałem się bawić kilka tygodni temu, gdy próbowałem to testować w celerity (które z tego co pamiętam w ogóle nie bardzo chciało udawać, że to pisze człowiek). Problem jest tego typu, że jQuery’owy trigger nie działa, gdy zdarzenia obsługuje się poprzez event delegation, tak jak to ma (i musi mieć) miejsce w moim przypadku. Więc odpada.

Znalazłem w necie info, że mogę odpalić metode keyup na driverze selenium i będzie gitara. Nie wiem tylko jak mieć dostęp do tegoż drivera w stepach.

[quote=Piotr Misiurek]Za pomocą JS próbowałem się bawić kilka tygodni temu, gdy próbowałem to testować w celerity (które z tego co pamiętam w ogóle nie bardzo chciało udawać, że to pisze człowiek). Problem jest tego typu, że jQuery’owy trigger nie działa, gdy zdarzenia obsługuje się poprzez event delegation, tak jak to ma (i musi mieć) miejsce w moim przypadku. Więc odpada.

Znalazłem w necie info, że mogę odpalić metode keyup na driverze selenium i będzie gitara. Nie wiem tylko jak mieć dostęp do tegoż drivera w stepach.[/quote]
Tu jest selenium-client używany w webracie: http://selenium-client.rubyforge.org/

keyup: http://selenium-client.rubyforge.org/classes/Selenium/Client/GeneratedDriver.html#M000121

Żeby tego użyć z webratem musisz zrobić:

  selenium.key_up("css=#my_form .some_input", "a")

Używam capybary z selenium-webdriver i nie mam w stepach niczego w stylu selenium, @selenium, sel cokolwiek co jest gdziekolwiek w internecie używane w dokumentacji i nie fryga mi też kod z Twojego poprzedniego postu, odnośnie wykonywania JS, z powoduje nie istnienia get_eval

Oops, myślałem, że chodzi o webrata.

Jeżeli chodzi selenium-webdriver, to z tego co wiem, nie ma tam na razie odpowiednika keyup z selenium. Spojrzę jeszcze później w dokumentację.