Тестирование транспортировщика (использование 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);
});