尝试使用滑动时出现错误,但似乎已贬值。建议使用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();
答案 0 :(得分:2)
我举了另一个例子,可以帮助您了解我正在从左向右滑动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();
}
}
答案 1 :(得分:2)
您可以创建自己的自定义滑动功能,如下所示;
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 scroll strategy
答案 2 :(得分:2)
您可以使用以下代码向左滑动:
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();
}
向右滑动:
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();
}
所用类的参考: