2009-09-18 7 views
5

Używam Selenium RC z trybem chrome do Firefoksa do automatyzacji przypadków testowych dla aplikacji internetowej. Piszę skrypty w Javie przy użyciu szkieletu TestNG i Eclipse. Teraz do głównego punktu:Selenium RC Mając problemy z XPath

Mam problemy z Selenium RC dla rozpoznawania niektórych XPaths. Zatwierdzam moje XPath z rozszerzeniem XPath-Checker dla Firefoksa, które nie wykazuje błędów. Następnie wypróbowałem to w Selenum IDE, aby upewnić się, że XPath jest rozpoznawany. Nawet IDE rozpoznaje element. Ale jego Selenium RC po prostu go nie rozpoznaje. Czy jest coś, co mogę zrobić, by to poprawić?

szczególności próbuję kliknąć na danym obszarze określonym przez:

html/body/form/div[@id='someid1']/div[@class='someClass']/div[@id='someid2']/div[@id='someid3']/div[@id='someid4']/div[@title='titleOfTheElement'] 

Wtedy też próbował:

//div[@title='titleOfTheElement'] 
xpath=//div[@title='Automated User'] 
xpath=/descendant::div[@title='Automated User'] 

nadal nic!

1) Czy ktoś może zasugerować, co może być nie tak, lub czy wiadomo, że Selenium ma problemy z XPath?

2) Czy nie ma żadnego dodatku (podobnego do sprawdzania XPath), który pomaga nam widzieć rzeczy tak, jak widzi Selen RC? W ten sposób możemy być pewni, czy RC rozpozna XPath.

Dzięki,
Mugen

Oto kod Selen:

selenium.click("somelink"); 
selenium.waitForPageToLoad("30000"); 

boolean flag=false 
    do{ 
    if (selenium.isTextPresent("Some text on the page which loads last")) 
    { 
     flag=true 
    } 
    }while(flag=false); 


selenium.click("locator for area which is driving me crazy"); 

Teraz na ostatnim etapie gdybym kliknij gdziekolwiek na stronie (czyli innego lokalizatora) kliknięcie zadziałałoby.

HTML dla obszaru wygląda następująco:

<div id="someid1" style="overflow: hidden;"> 
<div id="someid2" title="title1" class="someclass">title1</div> 
<div id="someid3" title="title2" class="someclass">title2</div> 
<div id="someid4" title="required title" class="someclass">required title</div> 
<div id="someid5" title="title3" class="someclass">title3</div> 
<div id="someid6" title="title4" class="someclass">title4</div> 
<div id="someid7" title="title5" class="someclass">title5</div></div> 

Dzięki obciążeniem dla patrząc na to. :-)

+0

Czy możesz zamieścić swoje polecenia Selenium RC? Czy czekasz na załadowanie strony przed wysłaniem polecenia kliknięcia? –

Odpowiedz

6

Nie jestem pewien, czy prawidłowe jest posiadanie elementu div z atrybutem title. Czy nie istnieje inny atrybut, który można wykorzystać do zlokalizowania elementu?

W każdym razie, oto wersja css lokalizatora, w przypadku to działa:

css=div[title='Automated User'] 
+0

Dziękuję za odpowiedź! Używanie css działa świetnie! Mylnie próbowałem css jako css = div [@ title = 'Automatyczny użytkownik'] - głupio mnie! – Mugen

+0

Cieszę się, że to zadziałało :) – Santi

0

Czy jesteś pewien, że strona jest poprawnie załadowana za pomocą RC, tzn. Czy przeglądarka jest otwarta i czy ładuje się strona?

+0

Dzięki za odpowiedź Jeremy. Tak, jestem w stanie prawidłowo otworzyć stronę. XPath dla innych obszarów wydaje się działać dobrze. Jest w jednym szczególnym obszarze, który po prostu nie rozpoznaje. Kliknięcie różnych elementów w tym obszarze powoduje wprowadzenie zmian w innym elemencie div na stronie. Czy to może być związane z problemem? – Mugen

2

Mieliśmy kiedyś problem z wyrażenia XPath podczas uruchamiania testów selen w Firefoksie.

  • Czy próbowałeś już korzystać z tych samych testów w innej przeglądarce?
  • Pamiętam, że zastąpiliśmy wszystkie nazwy elementów gwiazdkami (*) i to pomogło. to znaczy

    // * [@ id = 'someid1']/* [@ class = 'SomeClass']/* [@ id = 'someid2']

2

Z Twojego przykład, powinny być w stanie w użyciu identyfikatora elementu docelowego:

selenium.click("id=someid4"); 

Chociaż podejrzewam, że identyfikatory są generowane dynamicznie i nie jesteś w stanie skorzystać z tej metody.

Nie widzę żadnego powodu, dlaczego następujący XPath nie będzie działać:

selenium.click("//div[@title='required title']"); 

Inne sposoby kierowania byłoby:

selenium.click("css=div[title='required title']"); 
selenium.click("css=.someclass:nth-child(4)"); //must be 4th child of parent element 

jest elementem div rzeczywisty cel? Czy reaguje na zdarzenie kliknięcia? Jeśli istnieje element podrzędny, który reaguje na kliknięcie, należy zamiast tego użyć tego celu. Możesz też spróbować rozwiązać problem, wykonując następujące polecenia:

mouseDown 
mouseUp 
fireEvent 
+0

Dzięki temu, że mój div nie był faktycznym celem "nie zareagował", musiał uzyskać selen do wciśnięcia znacznika :-) – Blundell

0

Może być twój skrypt jest szybszy niż strona internetowa .to spróbuj poczekać na jakiś czas. jak można użyć waitForCondition("selenium.isElementPresent("ElementID")","20000");

Ponieważ wydaje nothg worng z xpath.try to może pomóc.