2016-09-01 17 views
2

私はSwiftを使ってXCTestでテストをしていますが、条件が満たされるまでフィードをスワイプしようとしています。私はswipeUp()を使用していますが、この問題は人間のスワイプのように振る舞い、この痛みを伴うアニメーションが遅くなることがあります。スローダウンアニメーションが完了するまでスワイプを再試行しません。さらに、このメソッドは引数をとりません。私は、かぼちゃのようなものがあるか、またはswipeUp(fast)またはswipeUp(medium)またはswipeUp(x0,y200)のようなスワイプメソッドのプロパティがあるAndroids Espressoでも撮影したいと思います。ここでXCTest Swift - スワイプをもっと速く、より正確に行うにはどうすればいいですか?

は、私がコードでやろうとしていますものです:XCUIApplicationで

func scrollDownUntilYouFindSomething() { 
    while !findingSomehting.exists { 
     app.swipeUp() 
    } 
} 

)十分なシンプルな、しかしswipeUpは(痛々しいほど遅いです。私は精度でスワイプしたいと思っています。私はReplicate pull to refresh in XCTest UI testing

から取られた座標アプローチを使用しようとしましたが、ループに入れたときと同じように遅くなりました。

答えて

3

はい、Swiftで座標ベースのスワイプを使用できます。 pressForDuration(duration、thenDragToElement:XCElement)を使用して、独自のスワイプアクションを作成できます。以下の例をご覧ください。このため

我々は、ビューに

  1. リファレンス要素が必要になります。(スワイプアクションを実行しなければならないセクションのいずれかを選んで、それはドラッグ可能要素であってはなりません)。
  2. 基準要素に対する開始座標。
  3. 参照要素に対する終点座標/ XCUIElement。

startdelxyである(0.0,0.0)とenddeltaxyは(-ve、0.0)である場合、我々はここで、(スイフト3)

func customSwipe(refElement:XCUIElement,startdelxy:CGVector,enddeltaxy: CGVector){ 
     let swipeStartPoint = refElement.coordinate(withNormalizedOffset: startdelxy) 
     let swipeEndPoint = refElement.coordinate(withNormalizedOffset: enddeltaxy) 
     swipeStartPoint.press(forDuration: 0.1, thenDragTo: swipeEndPoint) 

} 

を以下と同様の機能を有することができ、スワイプはrefElementから上方に移動します。 enddeltaxyが(0.0、+ ve)の場合、スワイプが下がります。これは、参照要素が原点になり、Xが右に移動し、Yが参照要素の下に移動するためです。小さい値のY(-0.75など)から始め、必要に応じて変更します。差を広げると、スワイプが長くなります。

swipeStartPointswipeEndPointは、(ビュー内に存在する場合)の要素で置き換えることができます。通常、の場合swipeEndPointスクロールアップアクションのために、ナビゲーションバーの要素に移動できます。また、Xを変更することで、カスタムスワイプを左右に送ることができます。

スワイプのスピードについては、デフォルトレートよりも速く/遅くスワイプできるAPIは認識していません。

3

私はそれがXCUIElementよりもはるかに穏やかなスワイプであることがわかりBharathram C.

によって与えられた優れた回答に基づいて拡張を書きました。スワイプアップ()

// XCUIElement+GentleSwipe.swift 

import Foundation 
import XCTest 

extension XCUIElement 
{ 
    enum direction : Int { 
     case Up, Down, Left, Right 
    } 

    func gentleSwipe(_ direction : direction) { 
     let half : CGFloat = 0.5 
     let adjustment : CGFloat = 0.25 
     let pressDuration : TimeInterval = 0.05 

     let lessThanHalf = half - adjustment 
     let moreThanHalf = half + adjustment 

     let centre = self.coordinate(withNormalizedOffset: CGVector(dx: half, dy: half)) 
     let aboveCentre = self.coordinate(withNormalizedOffset: CGVector(dx: half, dy: lessThanHalf)) 
     let belowCentre = self.coordinate(withNormalizedOffset: CGVector(dx: half, dy: moreThanHalf)) 
     let leftOfCentre = self.coordinate(withNormalizedOffset: CGVector(dx: lessThanHalf, dy: half)) 
     let rightOfCentre = self.coordinate(withNormalizedOffset: CGVector(dx: moreThanHalf, dy: half)) 

     switch direction { 
     case .Up: 
      centre.press(forDuration: pressDuration, thenDragTo: aboveCentre) 
      break 
     case .Down: 
      centre.press(forDuration: pressDuration, thenDragTo: belowCentre) 
      break 
     case .Left: 
      centre.press(forDuration: pressDuration, thenDragTo: leftOfCentre) 
      break 
     case .Right: 
      centre.press(forDuration: pressDuration, thenDragTo: rightOfCentre) 
      break 
     } 
    } 
} 
+0

チャームのように働いた。ブラボー – ScottyBlades

関連する問題