11
  1. スワイプのために以下のコーディングを試しました。
  2. テスト ケースの実行中、スワイプ アクションは発生せず、エラー メッセージも表示されません。
  3. 左から右へ、またはその逆に両側をスワイプするにはどうすればよいですか。

次の 2 つの方法があります。

方法 1 (TouchActions を使用):-

    1. //Swipe Right to Left side of the Media Viewer First Page
                    WebElement firstPages = driver.findElement(By.id("media-list"));
                    TouchActions flick = new TouchActions(driver).flick(firstPages,-100,0,0);
                    flick.perform();

    2. //perform swipe gesture
                   TouchActions swipe = new TouchActions(driver).flick(0, -20);
                   swipe.perform();

方法 2 (javascript を使用):-

public static void swipe(WebDriver driver) {

            JavascriptExecutor js = (JavascriptExecutor) driver;
            HashMap<String, Double> swipeObject = new java.util.HashMap<String, Double>();
            swipeObject.put("startX", 0.95);
            swipeObject.put("startY", 0.5);
            swipeObject.put("endX", 0.05);
            swipeObject.put("endY", 0.5);
            swipeObject.put("duration", 1.8);
            js.executeScript("mobile: swipe", swipeObject);
        }
4

3 に答える 3

2

標準の FlickAction.SPEED_NORMAL引数とflickのアクション ビルダーを含む次の実装を試してください。

import org.openqa.selenium.interactions.touch.FlickAction;

private Action getBuilder(WebDriver driver) {
    return new Action(driver);
}

WebElement toFlick = driver().findElement(By.id("media-list"));
    Action flick = getBuilder(driver()).flick(toFlick, -500, 0, FlickAction.SPEED_NORMAL).build();
    flick.perform();

左から右へのスワイプとその逆は、X-asis 座標を変えることで実行できます。

  • 左にスワイプ:

アクション フリック = getBuilder(driver()).flick(toFlick, -500 , 0, FlickAction.SPEED_NORMAL).build();

  • 右にスワイプ:

アクション フリック = getBuilder(driver()).flick(toFlick, 500 , 0, FlickAction.SPEED_NORMAL).build();

  • 上にスワイプ:

アクション フリック = getBuilder(driver()).flick(toFlick, 0, 500 , FlickAction.SPEED_NORMAL).build();

  • 下にスワイプ:

アクション フリック = getBuilder(driver()).flick(toFlick, 0, -500 , FlickAction.SPEED_NORMAL).build();

于 2015-04-20T09:39:06.470 に答える
0

これは古い質問であることは知っていますが、これに関して多くの同様の問題に遭遇しました。

他の人が指摘しているように、それは一般的にタイミングの問題です。そのため、要素が存在するのを待って (つまり、ドライバーが制御を返し、ページがレンダリングされた)、フリック アクションの前後に短いスリープを行うと確実にすべてのページ/アプリで機能することがわかりました。でテストしました。したがって、コードは次のようになります。

WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("some-element-id)));
flickIt(driver, element -100, 0);

private void flickIt(WebDriver driver, WebElement el, int x, int y) {
    SyntheticsUtility.sleep(500); // put 0.5s sleeps around it to make sure, need to be stable
    TouchActions touch = new TouchActions(driver);
    touch.flick(el, x, y, FlickAction.SPEED_NORMAL);
    touch.perform();
    SyntheticsUtility.sleep(500);
}
于 2016-07-28T15:31:29.357 に答える
0

JavaScript の負荷の高い Web サイトの機能をテストする際にアクションが完全に機能しない一般的な理由は、サイトの初期化が完了する前にアクションが実行されることです。これをテストする最も簡単な方法は、アクションを実行する前に短いスリープを追加することです。2秒言ってください。

これで問題が解決した場合は、ページの初期化とテスト コードの実行の間に競合状態があることがわかります。

その時点で、アクションが可能になるまで待機するようにコードを書き直すことができます

于 2015-04-20T09:22:32.967 に答える