12

Przeprowadzałem debugowanie testu i stwierdziłem, że kątomierz znajduje właściwy element, ale lokalizacja (x i y) nie jest powiązana z lokalizacją przycisk, który został znaleziony. Kiedy kliknie się na ten element, nie trafia i klika niewłaściwe miejsce, powodując niepowodzenie testu.Testowanie kątomierza (przy użyciu Selenium i Chrome na kanciastej stronie) daje błędny punkt x i y

Na marginesie testy te wydają się działać dobrze na innych komputerach, z tą różnicą, że system operacyjny, w którym testy nie działają, to system Windows 10?

Czy ktoś wie, jak kątomierz/selen określa położenie elementu.

Z góry dziękuję.

Jack Reeves

EDIT:

Po komentarzu wnioskiem kilka przykładów:

Aby uzyskać obiekt strona:

browser.get('examplePageAddress') 

Aby uzyskać nagłówek, który przycisk jest zlokalizowany:

var elem = element.all(by.className('header')).get(0) 

Aby uzyskać div że przycisk znajdujący się w nagłówku:

var div = elem.element(by.name('examplename')) 

Aby uzyskać rzeczywiste przycisk

var button = element(by.name('exampleButtonName')) 

W teście prosty button.click() jest wywoływana i to jest brakuje tego przycisku o około 50 pikseli.

Poprzez debugowanie i zapisywanie na konsoli potwierdziłem, że wybrany jest właściwy element [przy użyciu .getInnerHTML()] i mierząc lokalizację przycisku ustalono, że jest około 50px inny [użył .getLocation() do określenia x i y zwracane przez kątomierz]

+0

Czy mógłbyś stworzyć powtarzalny przykład? Pokaż też, jak określasz lokalizację. Dzięki. – alecxe

+2

Czy element ma animację lub css, który może wydawać się nietypowy? – Brine

+0

Nie wygląda na to, ponieważ powiedziałem, że działa, gdy ten test jest uruchamiany na innych maszynach, co jest najdziwniejsze! Sam przycisk znajduje się w div, a jego lokalizacja div jest błędna: S – JackFrost

Odpowiedz

5

W teście prosty button.click() jest wywoływana i to, czego brakuje przycisku przez około 50px

W tym przypadku przejść do najpierw element, a następnie kliknij jedno kliknięcie:

browser.actions().mouseMove(button).click().perform(); 

Albo scroll into view elementu:

browser.executeScript("arguments[0].scrollIntoView();", button.getWebElement()); 
button.click(); 

Zauważ, że getLocation() sama zależy od obszaru widzialnego - rzutni że przeglądarka określa. Może się różnić w różnych przeglądarkach i różnych systemach operacyjnych.Zobacz także:

I rzeczywiście można uzyskać rozmiar viewport i porównać je na przeglądarkach i systemach wykonać testy na swoje - Jestem prawie pewien, że masz różne wartości patrz:

można też spojrzeć na to, co getBoundingClientRect() powraca w Twoim przypadku:

Sposób Element.getBoundingClientRect() zwraca rozmiar elementu i jego położenie względem rzutni.

browser.executeScript("return arguments[0].getBoundingClientRect();", button.getWebElement()).then(function (rect) { 
    console.log(rect.left); 
    console.log(rect.top); 
}); 
+0

Hej był bardzo zajęty w pracy, miał nadzieję wypróbować to przed przyznaniem ci punktów, ale automatycznie wygasł, więc zgadnij, że je dostajesz :) dziękuję za wejście dam wam znać, jeśli to rozwiąże to! – JackFrost