Тестирование транспортировщика (использование Selenium и Chrome на сайте angular) дает неправильные точки x и y

Я отлаживал тест и обнаружил, что транспортир находит правильный элемент, но местоположение (x и y) не ссылается на местоположение найденной кнопки. Когда клик вызывается в этом элементе, он пропускает и нажимает не то место, из-за чего тест терпит неудачу.

В качестве примечания эти тесты, похоже, отлично работают на других машинах, с той лишь разницей, что операционная система, с которой работают тесты, является Windows 10?

Кто-нибудь знает, как транспортир/селен определяет местоположение элемента.

Спасибо заранее.

Джек Ривз

EDIT:

После комментария, запрашивающего несколько примеров:

Чтобы получить объект страницы:

browser.get('examplePageAddress')

Чтобы получить заголовок, в котором находится кнопка:

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

Чтобы получить div, что кнопка находится внутри заголовка:

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

Чтобы получить фактическую кнопку

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

В текущем тесте вызывается простая кнопка button.click(), и это то, что пропускает кнопку примерно на 50 пикселей.

С помощью отладки и записи на консоль я подтвердил, что правильный элемент выбран [using.getInnerHTML()], и, измеряя местоположение кнопки, определено, что оно около 50px разных [используется .getLocation() для определения x и y, возвращенный транспортиром]

Ответ 1

В текущем тесте вызывается простая кнопка button.click(), и это то, что отсутствует кнопка примерно на 50 пикселей

В этом случае сначала перейдите к элементу, а затем выполните щелчок:

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

Или, прокрутите страницу в вид:

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

Обратите внимание, что getLocation() сам зависит от видимой области - окна просмотра, которое определяет браузер. Он может отличаться в разных браузерах и разных операционных системах. См. Также:

И вы можете получить размер viewport и сравнить его с браузерами и системами, в которых выполняете свои тесты. Я уверен, что вы получите разные значения:

Вы также можете посмотреть, что getBoundingClientRect() возвращает в вашем случае:

Метод Element.getBoundingClientRect() возвращает размер элемента и его позицию относительно окна просмотра.

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