2013-02-20 5 views
7

Tak, mamy następujący kod w naszej stronie:Droga wokół elementu nie można przewijać do widzenia - Watir-webdriver z Ruby

<div class="toggle-wrapper"> 
    <input id="HasRegistration_true" class="registration_required toggle" type="radio" value="True" name="HasRegistration" data-val-required="The HasRegistration field is required." data-val="true"> 
    <label for="HasRegistration_true" class="">On</label> 
    <input id="HasRegistration_false" class="registration_required toggle" type="radio" value="False" name="HasRegistration" checked="checked"> 
    <label class="checked" for="HasRegistration_false">Off</label> 
</div> 

Te są 2 przyciski radiowe. 'Sporadycznie'. "Off" jest wartością domyślną.

Korzystając z Watir-webdriver i Ruby, chcemy wybrać przycisk radiowy "Włącz". Robimy to tak:

browser.radio(:id => "HasRegistration_true").set 

Ale w ten sposób, otrzymujemy następujący błąd:

`WebElement.clickElement': Element cannot be scrolled into view:[object HTMLInputElement] (Selenium::WebDriver::Error::MoveTargetOutOfBoundsError) 

Wiemy selen 2 Przewijanie strony elementu, więc próbuje przewijać jest bezużyteczny. Zawsze używamy najnowszych wersji watir-webdriver i ruby.

Nie możemy zmienić kodu HTML strony, ponieważ jesteśmy inżynierami ds. Kontroli jakości.

+3

Nie udało się odtworzyć problemu za pomocą strony z podanym html. Czy jest więcej strony, która jest wymagana do odtworzenia problemu? Jaką przeglądarkę wypróbowałeś (tj. Czy występuje we wszystkich przeglądarkach)? Wspomniałeś o użyciu najnowszego klejnotu Watir-Webdriver, ale czy upewniłeś się, że selen-webdriver jest aktualny? –

+0

Mówisz "Wiemy, że Selenium 2 przewija stronę do elementu ..." Czy możesz to rozwinąć? Skąd ty to wiesz? Czy widzisz, jak to się stało? –

+0

Czy na stronie dzieje się dużo rzeczy Ajax? fragmenty strony renderowane po zakończeniu przeglądarki "ładowanie" Twój problem może wynikać z próby interakcji z elementem, zanim będzie on "gotowy" lub został przeniesiony do ostatecznej pozycji na stronie, innymi słowy problemu synchronizacji. Możesz wypróbować polecenia ręcznie przez IRB i sprawdzić, czy działają, jeśli tak, to zwykle jest to problem z synchronizacją. –

Odpowiedz

0

Przede wszystkim spróbuj umieszczenie elementu przy użyciu XPATH:

browser.element(:xpath, "//input[@id='HasRegistration_true']").click 

lub

alternatywnie jeśli jest ukryty elementem próbujesz zlokalizować to jesteś lepiej wyłączyć za pomocą CSS. Pobierz dodatek firebug do firefox i skopiuj ścieżkę CSS swojego elementu.

To powinno być coś takiego:

browser.element(:css => "the CSS path you have copied from Firebug").click 

jednym z 2 powinien to zrobić dla ciebie !!

Powodzenia!

0

Można manipulować html w locie, wykonując niektóre javascript, aby ustawić element radiowy. Aby wykonać skrypt na stronie, zrobić coś takiego: @browser.execute_script("your javascript here")

Kiedyś coś takiego następującym javascript rozebrać klasę z tagiem etykiet który przeniósł go z drogi znacznika wejściowego ja próbuje działać na dla określonego problemu z Chrome. execute_script("$(\"label.classname\").removeClass(\"classname inline\")")

+0

Pytanie to nie sugeruje, że element radiowy nie jest możliwy do ustawienia; tylko, że mają trudności z przewijaniem do niego. –

0

Jeśli element jest zawarty w formie i div (Wrap) klasa I okazało się, że musiałem wykonać następujące czynności, aby kliknąć „nr” opcję na stronie „https://quote.comparethemarket.com/Motor/Motor/AboutYourVehicle.aspx?”:

div_list = @ browser.form (: action => "? AboutYourVehicle.aspx ton_t = CTMMO & prdcls = PC & rqstyp = newmotorquote & AFFCLIE = CM01"). div (: class => "inputWrap"). divs (: class => "custom-radio")

A następnie: div_list [1].kliknij

nadzieję, że to rozwiązuje problem zbyt :-)

1

Oto dwa rozwiązania, które pracowały dla mnie:

Jest gem Ruby nazywany watir-scroll że może pracować.

Następnie

require 'watir-scroll' 
browser.scroll.to browser.radio(:id, "HasRegistration_true") 

Jeśli nie chcesz dodać gem, mój współpracownik zaproponował coś, co nieco zaskakująco (mi) miała taki sam efekt jak wyżej kodu:

browser.radio(:id, "HasRegistration_true").focus 
browser.radio(:id, "HasRegistration_true").set 

W moim kodzie ".focus" przewinął się prosto do elementu, który wcześniej nie był widoczny. To może działać również dla ciebie.

Powiązane problemy