原理:先将一个机型作为标准,获取该机型中app的元素绝对坐标[start(x,y)和end(x,y)]和该机型的宽或高,并分别计算start和end的X 和Y坐标系数值,再根据当前测试机型的宽或高,乘以相对应的系数值,就计算出当前机型的start(x,y)和end(x,y)坐标。 具体实现,要了解清楚swipe方法实现坐标的操作思路。
package main;
import io.appium.java_client.AppiumDriver;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.Point;
import org.openqa.selenium.remote.DesiredCapabilities;
public class app_init {
public static AppiumDriver set_up() throws Exception {
AppiumDriver driver;
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("platformName", "Android");
capabilities.setCapability("deviceName", "W4OZLZ6L4TWG4HCU");
capabilities.setCapability("platformVersion", "5.1");
capabilities.setCapability("appPackage","com.fuzhong.xiaoliuaquatic");
capabilities.setCapability("app","D:\\XiaoLiuAquatic_product_6.0.4.apk");
capabilities.setCapability("noReset","True");
driver = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"),capabilities);
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
return driver;
}
/**获取变动的X坐标值
* 原理:根据设置系数(以某个机型作为标准,获取此机型的width值和元素坐标X值),再获取当前测试机的width值,得到当前测试机的相对坐标X值
* @param driver
* @param x 参考机型该元素的x坐标值
* @param s_w 参考机型的width值
* @return 返回当前机型的x坐标值
*/
public static int Get_x_coordinate(AppiumDriver driver,double x, int s_w){
double a = x / s_w;
int w = driver.manage().window().getSize().width;
int new_x= (int) (a * w);
return new_x;
}
/**获取变动的Y坐标值
* 原理:根据设置系数(以某个机型作为标准,获取此机型的height值和元素坐标Y值),再获取当前测试机的height值,得到当前测试机的相对坐标Y值
* @param driver
* @param y 参考机型该元素的y坐标值
* @param s_h 参考机型的height值
* @return 返回当前机型的y坐标值
*/
public static int Get_y_coordinate(AppiumDriver driver,double y, int s_h){
double b = y / s_h;
int h = driver.manage().window().getSize().height;
int new_y= (int) (b * h);
return new_y;
}
public static void main(String[] args) throws Exception {
AppiumDriver drivers = set_up();
//获取当前测试机操作元素的坐标:star(x1,y1)坐标到end(x2,y2)坐标
int x1 = Get_x_coordinate(drivers, 54.00, 720);
int y1 = Get_y_coordinate(drivers, 578.00, 1184);
int x2 = Get_x_coordinate(drivers, 666.00, 720);
int y2 = Get_y_coordinate(drivers, 658.00, 1184);
System.out.print("x1:" + x1 + "\n");
System.out.print("y1:" + y1 + "\n");
System.out.print("x2:" + x2 + "\n");
System.out.print("y2:" + y2 + "\n");
drivers.swipe(x1, y1, x2, y2, 2);
}
}