UPD: смотрите ответ @vmaximv внизу Это возможно только через выполнение JavaScript через IJavaScriptExecutor
вот пример на JavaScript получения координат окна браузера на десктопе.
Откройте консоль JS на этой странице. Следующий код выведет позицию логотипа AT.Info относительно экрана.
var atinfoLogo = document.getElementById('site-logo');
function getElementCoords(element)
{
var browserX = window.screenX;
var browserY = window.screenY;
var rect = element.getBoundingClientRect();
var elementOffsetX = rect.left;
var elementOffsetY = rect.top;
return {
X : browserX + elementOffsetX,
Y : browserY + elementOffsetY,
};
}
// ==
getElementCoords(atinfoLogo);
Спасибо за советы!!!
Только дошли руки до этой темы, могу отписаться что селениум не помог, остается пробовать выше предложенный метод dzhariy"А"
> IMouse mouse = ((IHasInputDevices)driver).Mouse;
var signinloc = (ILocatable)element;
Size dimesions = element.Size;
var screenX = signinloc.LocationOnScreenOnceScrolledIntoView.X;
var screenY = signinloc.LocationOnScreenOnceScrolledIntoView.Y;
mouse.MouseMove(signinloc.Coordinates);
Свойство локатион дает координаты элемента относительно браузера, а это не то что нужно. Нужно получить координаты относительно, экрана. Имеется ввиду разрешение.
#region ICoordinates Members
/// <summary>
/// Gets the location of an element in absolute screen coordinates.
/// </summary>
public System.Drawing.Point LocationOnScreen
{
get { throw new NotImplementedException(); }
}
Идея была вот какая:
Делим на пополам высоту и ширину элемента, потом добавляем эти координаты к координатам верхней левой точки элемента и кликаем в центр элемента с помощью вот такого кода:
У меня стоит задача разработать стабильный клик, так как многие способы кликать по элементу часто не срабатывают, к примеру селениум, java клик, сенд энтер и подобные. На данный момент уже есть около 10 кликов, что снижает производительность т.к. мы пытаемся кликать по эл. одним потом другим потом третьим и т.д.
А такой клик по моему личному мнению будет стабильным.
Кстати метод получения координат с помощью явы прделоженный, уважаемым человеком dzhariy также не работает, вернее выдает не точные координаты.
Уверен что упорство победит и я найду способ получения этих координат. Всем спасибо за помощь.
А может просто стоит разобраться почему IEDriver не кликает на элемент? Например, не находит его на странице, потому что он ещё не загрузился. В этой ситуации твои ухищрения не дадут результата
Я бы не советовал пытаться решить эту проблему самостоятельно через WinAPI, т.к. IEDriverServer с нативными эвентами делает тоже самое.
Более эффективным будет решение самой проблемы “некликанья”, чем создание многочисленных воркэраундов.
requireWindowFocus=true + enablePersistentHover=true пробовали?
Честно говоря перепробовали очень много, но “ИндоСтайл” мягко говоря удивляет, и я иду таким путем т.к. уверен что именно такой подход раз и на всегда решит проблему клика.
vmaximvУ отвечу - ДА. Пробовали, изменение этих свойств приведет к тому что тесты начнут падать на FF.
Эмм… Т.е. вы параллельно ранаете тесты на ФФ и ИЕ с нативными эвентами на одной и той же машине?
Прочитайте секцию “Native Events and Internet Explorer” на GitHub - SeleniumHQ/selenium-google-code-issue-archive: Archive, please see main selenium repo - каким образом вы будете решать озвученные там проблемы, ведь вполне очевидно что просто mouse_event из user32.dll не достаточно?
Можете пробежать по исходникам, что бы в полной мере осознать серьезность проблемы:
А можете назвать Джима нубом, ничего не смыслящим в WinApi, IE, С++ и продолжать изобретать велосипед