Selenium testy - rect is undefined

0

Witam panowie. Mam problem, który jest dla mnie w ogóle niezrozumiały, otóż robię sobie testy Selenium na projekcie w którym obecnie uczestniczę. Aktualnie jestem na CRUD'zie i póki co wszystko było cacy aż do teraz. Mianowicie mam konta Ebay. Dodanie składa się z modala, który ma 2 tabstripy. Pracuję przy użyciu Kendo więc wcześniej gdzie miałem dropdowny, numericboxy czy inne takie musiałem po wpisaniu wartości zrobić focusa na danym elemencie. Problem jest w tym że o ile na pierwszym tabstripie nie ma problemu, ten sam kod na drugim już wywala błędy !? Kod jest ten sam, próbowałem też jakoś inaczej zrobić focusa ale dalej jest smutno. Dodam, że przy innych CRUDach problemów z tym nie miałem (może dlatego że tam nie było modala tylko na gridzie się wszystko robiło).

Więc tak, fragment kodu z testu:

js.ExecuteScript("$('#ShopAccount').children('.k-grid-toolbar').children('.k-grid-add').click()"); //kliknięcie buttona 'wstaw'

            //pierwszy tabstrip
            js.ExecuteScript("$('#Shop').val(4)"); //ustawienie wartości na dropdownie
            IWebElement shop = driver.FindElement(By.XPath("//*[@id='tabstrip-1']/div[1]/div[2]/span[1]")); //znalezienie elementu dropdowna
            action.MoveToElement(shop).Click().Perform(); //akcja focusująca

            //wypełnienie textboxów
            driver.FindElement(By.Id("Username")).SendKeys("Marek");
            driver.FindElement(By.Id("ClientId")).SendKeys("marko");
            driver.FindElement(By.Id("Password")).SendKeys("marek123");
            driver.FindElement(By.Id("TokenRuName")).SendKeys("markowski");
            
            driver.FindElement(By.XPath("//*[@id='tabstrip']/ul/li[2]")).Click(); //przejście na drugi tabstrip

            //IWebElement priceType = driver.FindElement(By.XPath("//*[@id='tabstrip-2']/div[2]/div[2]/span"));
            //IWebElement orderStatus = driver.FindElement(By.XPath("//*[@id='tabstrip-2']/div[3]/div[2]/span"));
            //IWebElement checkBox = driver.FindElement(By.Id("ChargeDeliveryCost"));

            js.ExecuteScript("$('#PriceLevel').val(1)"); //ustawienie wartości na pierwszym dropdownie z drugiej karty
            IWebElement priceLevel = driver.FindElement(By.XPath("//*[@id='tabstrip-2']/div[1]/div[2]/span[1]")); //znalezienie jego elementu
            action.MoveToElement(priceLevel).Click().Perform(); //jak wyżej focusowanie
            //js.ExecuteScript("$('#PriceType').val(1)");
            //action.MoveToElement(priceType).Click().Perform();
            //js.ExecuteScript("$('#OrderStatusId').val(2)");
            //action.MoveToElement(orderStatus).Click().Perform();
            driver.FindElement(By.Id("Margin")).Clear();
            driver.FindElement(By.Id("Margin")).SendKeys("5");
            driver.FindElement(By.Id("Margin")).Click();
            js.ExecuteScript("$('#ChargeDeliveryCost').click()");
            //js.ExecuteScript("$('#PriceLevel').focus()");
            //js.ExecuteScript("$('#PriceType').focus()");
            //js.ExecuteScript("$('#OrderStatusId').focus()");
            //js.ExecuteScript("$('#Margin').click()");


            //action
            //    .MoveToElement(priceLevel).Click()
            //    .MoveToElement(priceType).Click()
            //    .MoveToElement(orderStatus).Click()
            //    .MoveToElement(checkBox).Click()
            //    .Perform();


            //driver.FindElement(By.XPath("/html/body/div[12]/div[2]/div/div[2]/a[1]")).Click();
            js.ExecuteScript("$('.k-grid-update').click()");

Na drugim tabstripie mam 3 dropdowny, numericboxa i checkbox co zostało zakomentowane żeby sprawdzić czy choć jeden działa. Niestety nie :/
Dla przykładu wrzucę fragment innego testu, który akurat działa a zrobione jest na tej samej zasadzie:

js.ExecuteScript("$('#deliveryDefinitionGrid').children('.k-grid-toolbar').children('.k-grid-add').click()");

            js.ExecuteScript("$('#CourierId').val(1)");
            driver.FindElement(By.Id("Name")).SendKeys("Jakaś nazwa");
            js.ExecuteScript("$('#ExternalCode').val('DPDDomestic')");
            js.ExecuteScript("$('#DeliveryDays').val(10)");
            js.ExecuteScript("$('#DeliveryCost').val(10)");
            IWebElement idDropDown = driver.FindElement(By.XPath("//*[@id='deliveryDefinitionGrid']/div[3]/table/tbody/tr[1]/td[1]/span[1]"));
            IWebElement codeDropDown = driver.FindElement(By.XPath("//*[@id='deliveryDefinitionGrid']/div[3]/table/tbody/tr[1]/td[3]/span[1]"));
            IWebElement checkBox = driver.FindElement(By.Id("COD"));
            IWebElement daysNumericBox = driver.FindElement(By.XPath("//*[@id='deliveryDefinitionGrid']/div[3]/table/tbody/tr[1]/td[5]/span[1]/span/input[1]"));
            IWebElement costNumericBox = driver.FindElement(By.XPath("//*[@id='deliveryDefinitionGrid']/div[3]/table/tbody/tr[1]/td[6]/span[1]/span/input[1]"));
            action
                .MoveToElement(idDropDown).Click()
                .MoveToElement(codeDropDown).Click()
                .MoveToElement(checkBox).Click()
                .MoveToElement(daysNumericBox).Click()
                .MoveToElement(costNumericBox).Click()
                .Perform();

            driver.FindElement(By.XPath("//*[@id='deliveryDefinitionGrid']/div[3]/table/tbody/tr[1]/td[7]/a[1]")).Click();
            driver.Navigate().Refresh();

Tam najpierw jest ustawiana wartość a następnie kliknięcie w każdy element co daje poprawny rezultat. Jest ktoś kto to ogarnia i jest w stanie mi wytłumaczyć o co tu do jasnej ciasnej chodzi?

W załączniku screen erroru. Co w ogóle jest dziwne krzyczy mi o jakiejś właściwości 'x' której nawet nie posiadam u siebie
#Edit ta właściwość 'x' już doszedłem że jest to jedna z dwóch współrzędnych (x, y), tylko że jak sprawdzę w konsoli tego dropdowna to normalnie ma to podane...

0

Zawsze możesz też wstrzykiwać javascript, który wykona Ci to, co chcesz osiągnąć :P

np. Przewiń do, naciśnij na, wpisz wartości w np. input, itd.

0
WeiXiao napisał(a):

Zawsze możesz też wstrzykiwać javascript, który wykona Ci to, co chcesz osiągnąć :P

np. Przewiń do, naciśnij na, wpisz wartości w np. input, itd.

Kendo jest mega oporne, jest spoko jak robisz to co masz "w pakiecie", ale jak chcesz już swoje zmiany wprowadzać to jest tyyyyyyyyyyyyyyyyyyyyyyyyyyyle zabawy. M.in. są problemy z tym jsem często, bo mimo że robię to od strony javascriptu to i tak bez efektu, niby się focusuje ale przechodzi dalej null. Wczoraj doszedłem że wywala mi na komendzie

MoveToElement(priceLevel)

Ten rect is undefined jest błędem selenium który ponoć naprawili, jednak widocznie nie do końca bo kiedy używam tabstripa to wszystko się sypie. Szukałem w źródle na gicie ale też lipa bo błąd wysypuje WebDriver. Chyba muszę do nich napisać bo to nie jest już takie proste, szczególnie że ani na stacku mi nikt nie pomógł ani tutaj, co już daje do myślenia ;p

0

@pavarotti: O taki efekt Ci chodziło z poziomu selenium?

https://demos.telerik.com/kendo-ui/tabstrip/index

indeks.gif

1 użytkowników online, w tym zalogowanych: 0, gości: 1