2015-08-24 20 views
0

我試圖在移動設備屏幕上使用appium執行圓圈手勢操作。我試着用swipe()press("args").moveTo("args")也試過用javascript執行器的方法。但無法在iOS的移動屏幕上執行圓圈手勢操作。如何使用appium爲iOS在移動設備屏幕上執行圓圈手勢操作

在從第一個點到最後一個點執行此操作時,需要執行此圓形手勢操作而不丟失中間的觸摸。

有沒有像AutoIT or Sikuli任何工具來執行移動設備上的這以上手勢操作,並且可以在appium腳本的Mac用java來執行。

回答

0

使用touch actions! 我試過它在iOS和Android真實設備上,它工作正常。但是,您可能需要花點時間才能獲得正確的座標集和移動參數。

+0

嗨Vvvaib,感謝您的答覆。 **我的問題是,我們是否可以執行完整的圓圈手勢,而不會丟失屏幕上的觸摸直到結束點**。 **'我嘗試了這一點,但得到了屏幕錯誤的座標。並且你知道appium如何考慮座標點嗎?** – Rohith

+0

我認爲你可以在不失去觸摸屏幕的情況下執行整個手勢。唯一的問題是 - 您必須在Touch操作命令中進行很多步驟才能逐個像素逐個移動並執行圓形手勢。我知道這是因爲我爲我的應用程序定製了縮小功能。屏幕左上角的座標爲0,0。如果你下降Y增加,並且如果你向右 - X增加。右下角是 - 設備的寬度,設備的高度。要獲得所有座標來製作一個圓 - 獲取圓周座標。更好地使用數學公式。 – Vaibhav

+0

http://math.stackexchange.com/questions/1310366/how-to-calculate-new-coordinates-on-a-circles-circumference-when-an-angle-is-gi – Vaibhav

1

對於那些尋找一個快速解決方案,這裏是基於在此線程的其他意見我的實現:

public void SwipeArc(double centerX, double centerY, double radius, double startDegree, double degrees, int steps) 
{ 
    //interpolate along the circumference of the circle 
    double angle = degrees/steps; 
    double prevX = centerX + radius * Math.Cos(startDegree * Math.PI/180F); ; 
    double prevY = centerY + radius * Math.Sin(startDegree * Math.PI/180F); 

    TouchAction circleTouch = new TouchAction(_Driver); //Your appium driver object here 
    circleTouch.Press(prevX, prevY); 

    for(int i = 1; i <= steps; ++i) 
    { 
     double newX = centerX + radius * Math.Cos((startDegree + angle * i) * Math.PI/180F); 
     double newY = centerY + radius * Math.Sin((startDegree + angle * i) * Math.PI/180F); 

     double difX = newX - prevX; 
     double difY = newY - prevY; 
     circleTouch.MoveTo(difX, difY); 

     prevX = newX; 
     prevY = newY; 
    } 

    circleTouch.Release(); 
    circleTouch.Perform(); 
} 

該解決方案假定Appium服務器要求相對座標的每一步,我不當然,如果這是所有Appium服務器版本的情況。

相關問題