首先,這是一個常見的點擊螢幕上一個坐標的語法:
public static void ClickPoint(AppiumDriver wd, final double x, final double y) throws InterruptedException {
JavascriptExecutor js = (JavascriptExecutor) wd;
HashMap<String, Double> tapObject = new HashMap<String, Double>();
// set point and time
// how many times
tapObject.put("tapCount", 1.0);
// how many fingers
tapObject.put("touchCount", 1.0);
// how long in seconds
tapObject.put("duration", 0.3);
tapObject.put("x", x);
tapObject.put("y", y);
// do tap
js.executeScript("mobile: tap", tapObject);
Thread.sleep(delay);
}
如果你跟我一樣是用 iOS,且你的坐標點是用 Appium Inspector 找出來,像我這樣子:
可是程式跟你報錯說超出螢幕範圍 (明明就在螢幕裡面呀),那你可能跟我一樣踩到同個坑
簡單來說,iOS app 最底層有一個 logical point,iOS Device 會依據自身的解析度去放大 app,使其符合 Device 螢幕
這個網站有很詳細的說明:http://www.iosres.com/
Appium 似乎是點擊在 logical resolution 上,而不是 device 的 resolution 上,而 Appium Inspector 抓到的是 device resolution 而不是 logical resolution
所以如果要在 iPad retina 上點坐標的話,要把 Appium Inspector 抓到的坐標除以 2,才不會超出螢幕範圍 (iPhone 6+ 要除以 3)
我都是用 iPad,還沒空測試 iPhone 是不是也是這樣
以上是被這雷搞了兩天,來發一下心得.....