t.me/atinfo_chat Telegram группа по автоматизации тестирования

Как взять координаты элемента у IE drivera относительно экрана(имеется ввиду разрешение)?

Я понял что нужно забить на все, и сделать свой метод, кстати он уже готов на 95 процентов, осталось только убрать немного харкода, чтобы все могли пользоваться

Вот пару тестов для отладки клика:

<html>
<head></head>
<body>
<div style='position:absolute;width:35px;height:20px;background-color:red' ></div><a id='link0' href='javascript:alert()'>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp hi!</a>
<br>
<a id='link1' href="javascript:alert()">hello<br>&nbsp <br>&nbsp </a>
<br>
<a id = 'link2' onmouseover="javascript:document.getElementById('link2').href='javascript:alert();'">hello</a>
<br>
<div style='width:30px;overflow:hidden'><a id='link3' href='javascript:alert()'>helohelohelohelo</a></div>
<br>
<div style='width:50px;height:50px;overflow:scroll'><a id='link4' href='javascript:alert()'><br><br>helohelohelohelo</a></div>
</body>
</html>

Всем привет и спасибо за помощь)
Могу отписаться о проделанной работе, клик все-таки доделан! Если что не так или есть предложения по улучшению пишите.

public static void UserClick(IWebDriver driver, IWebElement element)
{
//Get Top Left Point
int browserPositionOnScreenByX = driver.Manage().Window.Position.X;
int browserPositionOnScreenByY = driver.Manage().Window.Position.Y;

        //Get Element Size
        int elementWidthX = element.Size.Width / 2;
        int elelentHeightY = element.Size.Height / 2;
        //Get Browser Size
        int browserSizeWidthX = driver.Manage().Window.Size.Width;
        int browserSizeHeightY = driver.Manage().Window.Size.Height;
        //Get DOM Size By Tag Body
        IWebElement body = driver.FindElement(By.XPath(".//body"));
        int domWidthX = body.Size.Width;
        int domHeightY = body.Size.Height;
        //Get Panel Menu And Borders Size 
        int menuWidthX = browserSizeWidthX - domWidthX;
        int menuheightY = browserSizeHeightY - domHeightY;
        //Get Element Position In DOM 
        int elementPositionInDomX = element.Location.X;
        int elementPositionInDomY = element.Location.Y;
        //Get Element Position On Screen
        int x = browserPositionOnScreenByX + elementPositionInDomX + elementWidthX + menuWidthX;
        int y = browserPositionOnScreenByY + elementPositionInDomY + elelentHeightY + menuheightY;
        //Navigate To Element And Run WinApi Click   
        Cursor.Position = new Point(x, y);
        Thread.Sleep(100);
        DoMouseClick();
    }   
1 Симпатия

Что будет, если body_size>browser_size? :wink:

И пропали ли ваши проблемы с кликом раз и навсегда с использованием данной реализации?

Что будет, если body_size>browser_size? такого не встречал пока, хотя все возможно)))
Проблемы с кликом раз и на всегда не пропали, но данная реализация клика помогла кликнуть по кнопке, которая не кликалась вообще не чем!

Как так? Никогда не скролили страницу в браузере?

Вначале делается скрол, устанавливается фокус на элемент и все) Птичка в клетке)) Далее выполняем выше указанный код. Можете потестить, думаю все получится) Если что пиши, отвечу на все вопросы.

Так а че тут тестить, если даже на данной странице размер body - 1349 × 9383 пихелей, а браузера availWidth 1366 х availHeight 734. Пусть нам надо кликнуть в точке (5,5)
menuheightY = browserSizeHeightY - domHeightY=734-9383=-8 649px

y = browserPositionOnScreenByY + elementPositionInDomY + elelentHeightY + menuheightY=0+5+0-8649=-8644

На данный момент я на работе, отвечу позже

Если тебе нужно кликнуть в точке 5,5 используй

Cursor.Position = new Point(5, 5);

И не смеши меня больше так))))))Советую тебе почитать


спасибо за предложенный способ - мне он сохранил много времени и нервов!