Как сменить свайп на метод TouchAction () - PullRequest
0 голосов
/ 07 февраля 2019

У меня возникла ошибка при попытке использовать свайп, но кажется, что она устарела.Рекомендуется использовать TouchAction(), но я не уверен, как преобразовать свайп в TouchAction().

Ниже приведен код:

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();
        }

    }

Ниже приведен пример TouchAction, который мне пришлось реализовать, поэтому я оставил его в качестве примера на данный момент.Я хочу посмотреть, как происходит преобразование, поэтому я понимаю, сравнивая приведенный ниже код с ответом:

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();

Ответы [ 3 ]

0 голосов
/ 11 февраля 2019

Вы можете создать свою собственную пользовательскую функцию прокрутки, как показано ниже:

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");
        }
    }

, где (startX, startY) представляет вашу начальную точку

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);

Проверьте этоссылка, чтобы узнать о различных стратегия прокрутки appium

0 голосов
/ 14 февраля 2019

Вы можете провести пальцем влево, используя следующий код:

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();
  }

SwipeRight:

 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();
  }

Справочник по используемым классам:

TouchAction

Размеры

0 голосов
/ 11 февраля 2019

Я взял другой пример, который поможет вам понять, что я пролистываю в Android-приложении слева направо, надеюсь, вы поймете.

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();
 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...