Я понял что нужно забить на все, и сделать свой метод, кстати он уже готов на 95 процентов, осталось только убрать немного харкода, чтобы все могли пользоваться
Вот пару тестов для отладки клика:
<html>
<head></head>
<body>
<div style='position:absolute;width:35px;height:20px;background-color:red' ></div><a id='link0' href='javascript:alert()'>         hi!</a>
<br>
<a id='link1' href="javascript:alert()">hello<br>  <br>  </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();
}
Что будет, если body_size>browser_size?
И пропали ли ваши проблемы с кликом раз и навсегда с использованием данной реализации?
Что будет, если 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);
И не смеши меня больше так))))))Советую тебе почитать
спасибо за предложенный способ - мне он сохранил много времени и нервов!