2012-02-15 63 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 
相關問題