Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Drag-n-Drop и клик на веб-страничке по указанным координатам (С#)


(qaleader) #1

Добрый день уважаемые форумчане, прошу вас поделиться опытом реализации функции drag-n-drop в Webdriver на языке C#.

Так же интересует возможность клика мышкой по указанным координатам. 

Буду очень благодарен если кто-то поделится примерами того как это реализовуется.

Заранее всем спасибо.

 


(Mykhailo Poliarush) #2

для этого нужно использовать Actions класс

http://selenium.googlecode.com/svn/trunk/docs/api/dotnet/html/AllMembers_T_OpenQA_Selenium_Interactions_Actions.htm

Пример нужне?


(qaleader) #3

Да, мне бы желательно живой пример. Друг помог с сами drag and drop, перетаскивание элементов используя локаторы делается легко. Но пример с перетаскиванием элементов в определенные координаты я так и не нашел. Как их указывать?

 

IWebElement element = driver.FindElement(By.Id("content_hiddena909e79d-923d-4b7d-8bff-c5e88009f10d"));
IWebElement target = driver.FindElement(By.Id("content_hidden4ff1b05b-3dd1-4c24-af46-772bca096eb2"));
 (new Actions(driver)).DragAndDrop(element, target).Perform();

Но вот как бы сюда прикрутить не поиск элементов By Id, а поиск элемента бай координаты X и Y ?


(Mykhailo Poliarush) #4

ну вот пример тогда

 

IWebElement toDrag = driver.FindElement(By.Id("draggable"));

IWebElement dropInto = driver.FindElement(By.Id("droppable"));

Actions actionProvider = new Actions(driver);

IAction holdDrag = actionProvider.ClickAndHold(toDrag).Build();

IAction move = actionProvider.MoveToElement(dropInto).Build();

IAction drop = actionProvider.Release(dropInto).Build();

holdDrag.Perform();

move.Perform();

drop.Perform();

 

 


(qaleader) #5

Спасибо, нашел то что мне нужно, вопрос больше не актуален :)


(Artem) #6

to qaleader, я так понял ты все таки по Id сделал или по координатам?

Если по x,y - покажи как.

 


(qaleader) #7

1) По методам FindElement.By:

 IWebElement element = driver.FindElement(By.Id("content_hiddena909e79d-923d-4b7d-8bff-c5e88009f10d"));
 IWebElement target = driver.FindElement(By.Id("content_hidden4ff1b05b-3dd1-4c24-af46-772bca096eb2"));
 (new Actions(driver)).DragAndDrop(element, target).Perform();

2) Перемещение по координатам :

Actions builder = new Actions(driver);
// Перемещаем объект на (x,y) относительно текущего положения
builder.ClickAndHold(driver.FindElement(By.Id("content_hiddena909e79d-923d-4b7d-8bff-c5e88009f10d"))).MoveByOffset(-100, -100);
builder.Release();
Thread.Sleep(100);  // обязательно должна быть пауза, иначе перемещение не сработает.
builder.Perform();
 

3) клик по координатам:

IJavaScriptExecutor jscript = driver as IJavaScriptExecutor;
                jscript.ExecuteScript(@"
                                function simulateClick(x, y) {
                                jQuery(document.elementFromPoint(x, y)).click(); }
                                simulateClick(800, 800);
                                ");


Имитация движения мыши с нажатой кнопкой
(Александр) #8

А можно пример на python как можно, скажем, кликнуть на странице по координате (100, 100) и перетащить курсор, удерживая нажатой кнопку мыши, на координату (200, 100)? Спасибо