2012-02-15 35 views
4

向所有人致以问候!Selenium Webdriver。 Internet Explorer 9中的鼠标操作不准确

我不是以英语为母语的人,所以请原谅我的公平语法。

Selenium是一个用于在不同浏览器中测试Web应用程序的框架。我想问问使用Selenium的人是否有任何帮助。我在Selenium的谷歌集团问人,但没有人帮助我。

我正在使用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)。所以每100px的偏移量有4px的错误。我的同事们不明白,他们发生了什么变化,以及为什么鼠标操作现在或他们能够正常工作。

一个更有趣的是,在视觉上(我想提醒你,我们就可以在画布上作画),这是绝对100像素(我们移动鼠标箭头垂直握住时,鼠标左键)!惊人!

所以,这是实验。

我问任何合适的人来帮助我解决这个问题。它只出现在IE9中。我想了解这种行为的原因。 Action类如何实现?它可以取决于鼠标驱动程序或类似的东西?在这种情况下,如果有问题,我使用无线鼠标,它有一个特殊的驱动程序。请帮帮我!

P.S.我试图改变我的鼠标设置,我的屏幕设置,但没有结果。

谢谢!

此致敬礼, Michael Kalygin。

回答

4

确保在IE9缩放级别设置为100% - 这是我能想到的,将由4%,抵消你的坐标中的唯一。

+0

哦,我的上帝!这是令人难以置信的,但看起来,这就是原因。我重新安装IE几次...我在看设置,并没有注意到它... 可能,IE默认设置为105%!注意,如果你在你的电脑上发现同样的问题! 非常感谢!你太棒了! :) P.S .:非常愚蠢......真的......对不起!所有的错误总是愚蠢的! :) – 2012-02-15 20:59:12

+0

“错误总是愚蠢的” - 我的生活故事... :) – Anders 2012-02-15 21:06:25

+0

它仍然可以在IE9下工作,即缩放级别较低。您必须执行以下代码:/ n var service = InternetExplorerDriverService.CreateDefaultService(@"C:\SeleniumDrivers"); var options = new InternetExplorerOptions { IgnoreZoomLevel = true }; Rishabh 2015-06-19 06:01:52

0

我略作修改的动作序列适合我的需要。它适用于IE8,但Firefox和Chrome不喜欢它。我试图用一些偏移量(100,100)来拖放元素,但是FireFox会抛出一个异常,说目标超出了界限,并给出了一些与我所做的不匹配的疯狂坐标数字。 Chrome只是不移动元素。

我的问题是,该图是一个第三方小部件,它使用铬和Firefox的svg。在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让鼠标在元素VS以上元素的左上角使它更加一致,因此操作是这样的:

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 
相关问题