5
votes

Comment changer le balayage en méthode TouchAction ()

J'ai rencontré une erreur en essayant d'utiliser le balayage, mais il semble qu'il soit déprécié. La recommandation est d'utiliser TouchAction () mais je ne sais pas comment convertir le balayage en TouchAction() .

Voici le code:

Dimension screenSize = driver.manage().window().getSize();
new TouchAction(driver)
  .press((int) (screenSize.width * 0.6), 130)
  .waitAction(500)
  .press((int) (screenSize.width * 0.3), 130)
  .release()
  .perform();

Voici un exemple de touchAction que j'ai eu du mal à mettre en œuvre, alors je l'ai laissé comme exemple pour le moment. Je veux voir comment la conversion se produit, donc je comprends en comparant le code ci-dessous à la réponse:

public void obj_scrollToObjectByCoOrds(int coOrds) throws IOException {
        try {

            List<WebElement> elements = driver.findElements(By.className("android.widget.FrameLayout"));
            Point point = elements.get(1).getLocation();
            Dimension size = elements.get(1).getSize();

            int elementCenterX = point.getX() + Math.round(size.getWidth() / 2);
            int elementCenterY = point.getY() + Math.round(size.getHeight() / 2);

            String originalContext = driver.getContext();
            driver.context("NATIVE_APP");

            driver.swipe(elementCenterX, elementCenterY, elementCenterX, elementCenterY + coOrds, 1500);
            driver.context(originalContext);




        } catch (Exception e) {
            e.printStackTrace();
        }

    }


2 commentaires

Pourquoi voudriez-vous glisser par coords? Cela semble très peu fiable. Je suggère d'utiliser UiScrollable à la place.


Tbh je n'ai pas écrit le code ci-dessus, je l'ai obtenu à partir d'un modèle et j'ai essayé de le refactoriser


3 Réponses :


2
votes

J'ai pris un autre exemple qui vous aide à comprendre que je glisse dans l'application Android de gauche à droite, j'espère que vous comprendrez ..

package Android;

import io.appium.java_client.MobileDriver;
import io.appium.java_client.TouchAction;
import io.appium.java_client.android.AndroidDriver;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

public class SwipeAction {
 AndroidDriver driver;
 Dimension size;
 WebDriverWait wait;
 @BeforeTest
 public void setUp() throws Exception {
  DesiredCapabilities capabilities = new DesiredCapabilities();
  capabilities.setCapability("deviceName", "ZX1B32FFXF");
  capabilities.setCapability("browserName", "Android");
  capabilities.setCapability("platformVersion", "4.4.2");
  capabilities.setCapability("platformName", "Android");
  capabilities.setCapability("appPackage", "com.fortysevendeg.android.swipelistview");
  capabilities.setCapability("appActivity","com.fortysevendeg.android.swipelistview.sample.activities.SwipeListViewExampleActivity");
  driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),capabilities);
  driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
  wait = new WebDriverWait(driver, 300);
  wait.until(ExpectedConditions.elementToBeClickable(By.className("android.widget.RelativeLayout")));
 }


 @Test
 public void swipingHorizontal() throws InterruptedException {
  //Get the size of screen.
  size = driver.manage().window().getSize();
  System.out.println(size);

  //Find swipe x points from screen's with and height.
  //Find x1 point which is at right side of screen.
  int x1 = (int) (size.width * 0.20);
  //Find x2 point which is at left side of screen.
  int x2 = (int) (size.width * 0.80);

  //Create object of TouchAction class.
  TouchAction action = new TouchAction((MobileDriver)driver);

  //Find element to swipe from right to left.
  WebElement ele1 =  (WebElement) driver.findElementsById("com.fortysevendeg.android.swipelistview:id/front").get(3);  
  //Create swipe action chain and perform horizontal(right to left) swipe.
  //Here swipe to point x1 Is at left side of screen. So It will swipe element from right to left.
  action.longPress(ele1).moveTo(x1,580).release().perform();

  //Find element to swipe from left to right.
  WebElement ele2 =  (WebElement) driver.findElementsById("com.fortysevendeg.android.swipelistview:id/back").get(3);
  //Create swipe action chain and perform horizontal(left to right) swipe.
  //Here swipe to point x2 Is at right side of screen. So It will swipe element from left to right.
  action.longPress(ele2).moveTo(x2,580).release().perform();
 }

 @AfterTest
 public void End() {
  driver.quit();
 }
}


0 commentaires

2
votes

Vous pouvez créer votre propre fonction de balayage personnalisée comme suit:

Dimension size = driver.manage().window().getSize();
int startX = (int) ((size.getWidth()) * 0.80);
int startY = (int) ((size.getWidth()) * 0.80);
int endX = startX; //for your case this may be same 
int endY = (int) ((size.getWidth()) * 0.20);
//now you can call swipe function
swipe(int startX, int endX, int startY, int endY);

où (startX, startY) représentent votre point de départ

import io.appium.java_client.TouchAction;
import io.appium.java_client.touch.WaitOptions;
import io.appium.java_client.touch.offset.PointOption;

public static void swipe(int startX, int endX, int startY, int endY) {
        try {
            new TouchAction(driver).press(PointOption.point(startX, startY)).waitAction(WaitOptions.waitOptions(ofSeconds(1)))
                    .moveTo(PointOption.point(endX, endY)).release().perform();
        } catch (Exception e) {
            System.out.println("unable to swipe");
        }
    }

Consultez ce lien pour connaître les différents stratégie de défilement appium


0 commentaires

2
votes

Vous pouvez balayer vers la gauche en utilisant le code ci-dessous:

 public static void swipeRight(AndroidDriver<?> driver)
  {
    Dimension size = driver.manage().window().getSize();
    int endx = (int)(width * 0.9D);
    int startx = (int)(width * 0.1D);
    int starty = height / 2;

    TouchAction<?> action = new TouchAction(driver);
    action.press(PointOption.point(startx, starty)).moveTo(PointOption.point(endx, starty)).release().perform();
  }

SwipeRight:

public static void swipeLeft(AndroidDriver<?> driver)
  {
    Dimension size = driver.manage().window().getSize();
    int startx = (int)(width * 0.9D);
    int endx = (int)(width * 0.1D);
    int starty = height / 2;

    TouchAction<?> action = new TouchAction(driver);
    action.press(PointOption.point(startx, starty)).moveTo(PointOption.point(endx, starty)).release().perform();
  }

Référence pour les classes utilisées: strong >

TouchAction p>

Dimensions


0 commentaires