Selenium Webdriver. Неточность действий мыши в Internet Explorer 9 - PullRequest
4 голосов
/ 15 февраля 2012

Приветствую всех!

Я не являюсь носителем английского языка, поэтому извините за мою честную грамматику.

Selenium - это фреймворк для тестирования веб-приложений в разных браузерах.Я хочу попросить людей, которые используют Selenium, за любую помощь.Я спрашивал людей из Google Selenium Group, но никто не помог мне.

Я работаю над проектом с помощью мыши, используя Selenium Webdriver.Я пишу тесты на C #.Когда моя команда начала использовать Selenium Webdriver, мы заметили, что действия мыши (OpenQA.Selenium.Interactions.Actions) ведут себя несколько неожиданно в IE и работают по-разному в разных браузерах (и даже на разных машинах).Впервые я был единственным тестером, который работал с мышью.Я обвинял Selenium Webdriver и пытался найти способ избежать этой неточности.Я долго занимался этой проблемой, но безрезультатно.Но я не хочу тратить ваше время на предысторию.

Хорошо, позвольте мне описать ситуацию.Мы создали демонстрационный проект: простую страницу с.И мы реализовали возможность рисовать на этом холсте, удерживая левую кнопку мыши.Поэтому я надеюсь, что это довольно ясно для вас.

Следующим важным моментом является то, что мы включили запись в консоль.То есть мы можем увидеть координаты стрелки мыши внутри холста, открыв консоль.

Затем мы написали тест:

Actions a = new Actions(driver); 
a.Build(); 
a.MoveToElement(canvas, 100, 100) 
 .ClickAndHold() 
 .MoveByOffset(100, 0) 
 .Release(); 
a.Perform(); 

Код довольно прост.Просто переместите стрелку мыши на холст, затем сместите стрелку мыши на (100, 100), а затем двигайте вертикально на 100 (удерживая левую кнопку мыши).Как вы понимаете, результат в логах должен быть (200, 100).

Но вот самое интересное: у моих коллег тот же результат (200, 100)!Но у них была неточность 1 месяц назад (поэтому мы подумали, что действия мыши работают неточно).И у меня все еще есть неточный результат: (192, 96).Таким образом, существует ошибка 4px на 100px смещения.Мои коллеги не понимают, что они изменили и почему действия мыши теперь или они работают правильно.

Еще одна интересная вещь заключается в том, что визуально (я напоминаю вам, что мы можем рисовать на холсте) это абсолютно 100px(мы держим кнопку мыши при перемещении стрелки мыши вертикально)!Удивительно!

Итак, это эксперимент.

Я прошу всех подходящих людей помочь мне с этой проблемой.Появляется только в IE9.И я хочу понять причину такого поведения.Как реализован класс Actions?Может это зависит от драйвера мыши или что-то в этом роде?В этом случае, если это имеет значение, я использую беспроводную мышь, и у нее есть специальный драйвер.Пожалуйста, помогите мне!

PS Я пытался изменить настройки моей мыши, настройки моего экрана, но безрезультатно.

Спасибо!

С уважением, Михаил Калыгин.

Ответы [ 2 ]

4 голосов
/ 15 февраля 2012

Убедитесь, что уровень масштабирования в IE9 установлен на 100% - это единственное, о чем я могу подумать, это сместит ваши координаты на 4%.

0 голосов
/ 16 января 2013

Я немного изменил последовательность действий в соответствии со своими потребностями. Он отлично работает для IE8, но Firefox и Chrome не нравятся. Я пытаюсь перетащить элемент с некоторым смещением (100,100), но FireFox выдает исключение, сообщающее, что цель вышла за пределы, и дает некоторые сумасшедшие координаты, которые не соответствуют тому, что я делаю. Chrome просто не перемещает элемент.

Моя проблема в том, что график является сторонним виджетом, который использует SVG для Chrome и Firefox. В IE я мог использовать общие методы для поиска «ячеек» на графике, но Firefox и Chrome не позволяют мне находить элемент (ячейки) по Id, Class или чему-либо еще. Итак, у меня есть javascriptExecutor, который я могу использовать для получения всех данных ячеек графа, включая x, y положение ячейки в виджете графа. Я могу получить расположение графического виджета, так как для графа есть «div-обертка». используя расположение графика я делаю следующее:

Point mxPoint = driver.GetElementPosition(GraphicalDisplayPage.GraphDisplayPaneById);
Actions moveCell = new Actions(driver);

moveCell.Build();
moveCell.MoveByOffset(mxPoint.X, mxPoint.Y);//move mouse to upper left corner of graph
moveCell.MoveByOffset(xOfCelltoMove, yOfCellToMove);//move mouse to cell we want to move
moveCell.ClickAndHold();//select cell and hold it
moveCell.MoveByOffset(100, 100);//drag cell
moveCell.Release();//drop it
moveCell.Perform();//run this set of actions

Хорошо, я понял свою проблему. Мне нужно получить размер элемента графа, разделить высоту и ширину на 2 и отменить эти значения для отрицательных смещений. Затем мой первый Move - это расположение элемента графика (центр элемента), затем переместимся в отрицательные смещения, чтобы получить левый верхний угол, затем переместимся по смещению к xOfCelltomove и yOfcelltomove. и мне хорошо идти. Я также добавил 10 к xOfCellToMove и yOfCellToMove, чтобы навести курсор мыши на элемент против левого угла элемента, чтобы сделать его более согласованным, чтобы действия выглядели так:

Size mxSize = driver.GetElementSize(GraphicalDisplayPage.JGraphDisplayPaneById);
mxSize.Height = -(mxSize.Height/2);
mxSize.Width = -(mxSize.Width/2);

//create the action and do it
Actions moveCell = new Actions(driver);

moveCell.Build();
moveCell.MoveToElement(driver.FindElement(GraphicalDisplayPage.JGraphDisplayPaneById)) //mxPoint.X, mxPoint.Y) //move mouse to center of graph

.MoveByOffset(mxSize.Width, mxSize.Height)//move mouse to top left corner of graph                    
.MoveByOffset(xOfCelltoMove , yOfCellToMove) //move mouse to cell we want    
.ClickAndHold() //select cell and hold it
.MoveByOffset(100, 100) //drag cell
.Release();//drop it

moveCell.Perform();//run this set of actions
...