From 91328a9fe3086a4773a7b6126feb6a788432f0b1 Mon Sep 17 00:00:00 2001 From: caofengbin <1050430934@qq.com> Date: Sat, 17 Jun 2023 15:08:30 +0800 Subject: [PATCH 1/5] =?UTF-8?q?Android=E7=AB=AF=E7=9A=84tap=EF=BC=8ClongPr?= =?UTF-8?q?ess=E4=B8=8Eswipe=E6=8E=A5=E5=8F=A3=E6=96=B9=E6=B3=95=E5=AE=9A?= =?UTF-8?q?=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sonic/driver/android/AndroidDriver.java | 50 +++++++++++++++++++ .../driver/android/service/UiaClient.java | 6 +++ .../android/service/impl/UiaClientImpl.java | 15 ++++++ 3 files changed, 71 insertions(+) diff --git a/src/main/java/org/cloud/sonic/driver/android/AndroidDriver.java b/src/main/java/org/cloud/sonic/driver/android/AndroidDriver.java index c499562..8aa350f 100644 --- a/src/main/java/org/cloud/sonic/driver/android/AndroidDriver.java +++ b/src/main/java/org/cloud/sonic/driver/android/AndroidDriver.java @@ -405,4 +405,54 @@ public byte[] screenshot() throws SonicRespException { public void setAppiumSettings(JSONObject settings) throws SonicRespException { uiaClient.setAppiumSettings(settings); } + + /** + * tap position on screen. + * + * @param x + * @param y + * @throws SonicRespException + */ + public void tap(int x, int y) throws SonicRespException { + uiaClient.tap(x, y); + } + + /** + * long press position on screen. + * + * @param x + * @param y + * @param ms + * @throws SonicRespException + */ + public void longPress(int x, int y, int ms) throws SonicRespException { + uiaClient.longPress(x, y, ms); + } + + /** + * swipe position on screen. + * + * @param fromX + * @param fromY + * @param toX + * @param toY + * @throws SonicRespException + */ + public void swipe(int fromX, int fromY, int toX, int toY) throws SonicRespException { + this.swipe(fromX, fromY, toX, toY, null); + } + + /** + * swipe position on screen with target time + * + * @param fromX + * @param fromY + * @param toX + * @param toY + * @param duration + * @throws SonicRespException + */ + public void swipe(int fromX, int fromY, int toX, int toY, Integer duration) throws SonicRespException { + uiaClient.swipe(fromX, fromY, toX, toY, duration); + } } diff --git a/src/main/java/org/cloud/sonic/driver/android/service/UiaClient.java b/src/main/java/org/cloud/sonic/driver/android/service/UiaClient.java index fc21e03..4704ddf 100644 --- a/src/main/java/org/cloud/sonic/driver/android/service/UiaClient.java +++ b/src/main/java/org/cloud/sonic/driver/android/service/UiaClient.java @@ -82,4 +82,10 @@ public interface UiaClient { //appium setting handler. void setAppiumSettings(JSONObject settings) throws SonicRespException; + + void tap(int x, int y) throws SonicRespException; + + void longPress(int x, int y, int ms) throws SonicRespException; + + void swipe(int fromX, int fromY, int toX, int toY, Integer duration) throws SonicRespException; } diff --git a/src/main/java/org/cloud/sonic/driver/android/service/impl/UiaClientImpl.java b/src/main/java/org/cloud/sonic/driver/android/service/impl/UiaClientImpl.java index 7d1141b..404447e 100644 --- a/src/main/java/org/cloud/sonic/driver/android/service/impl/UiaClientImpl.java +++ b/src/main/java/org/cloud/sonic/driver/android/service/impl/UiaClientImpl.java @@ -353,4 +353,19 @@ public void setAppiumSettings(JSONObject settings) throws SonicRespException { throw new SonicRespException(b.getErr().getMessage()); } } + + @Override + public void tap(int x, int y) throws SonicRespException { + + } + + @Override + public void longPress(int x, int y, int ms) throws SonicRespException { + + } + + @Override + public void swipe(int fromX, int fromY, int toX, int toY, Integer duration) throws SonicRespException { + + } } From 824b61dd3b47d8a8549c894d5db75f2c3da85dbc Mon Sep 17 00:00:00 2001 From: caofengbin <1050430934@qq.com> Date: Sat, 17 Jun 2023 15:31:32 +0800 Subject: [PATCH 2/5] =?UTF-8?q?swipe=E6=93=8D=E4=BD=9C=E7=9A=84=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../android/service/impl/UiaClientImpl.java | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/cloud/sonic/driver/android/service/impl/UiaClientImpl.java b/src/main/java/org/cloud/sonic/driver/android/service/impl/UiaClientImpl.java index 404447e..84e4468 100644 --- a/src/main/java/org/cloud/sonic/driver/android/service/impl/UiaClientImpl.java +++ b/src/main/java/org/cloud/sonic/driver/android/service/impl/UiaClientImpl.java @@ -366,6 +366,27 @@ public void longPress(int x, int y, int ms) throws SonicRespException { @Override public void swipe(int fromX, int fromY, int toX, int toY, Integer duration) throws SonicRespException { - + checkSessionId(); + JSONObject data = new JSONObject(); + data.put("startX", fromX); + data.put("startY", fromY); + data.put("endX", toX); + data.put("endY", toY); + // steps 参数为uiautomator层定义的单位 + // example:So for a 100 steps, the swipe will take about 1/2 second to complete. + if (duration == null) { + data.put("steps", 100); + } else { + data.put("steps", duration / 5); + } + BaseResp b = respHandler.getResp(HttpUtil.createPost(remoteUrl + "/session/" + sessionId + "/touch/perform") + .body(data.toJSONString())); + if (b.getErr() == null) { + logger.info("perform swipe action %s.", data.toString()); + } else { + logger.error("perform swipe action failed."); + throw new SonicRespException(b.getErr().getMessage()); + } } + } From 208afc6b3b52e702d65aa24d9d2e24084ff8bccf Mon Sep 17 00:00:00 2001 From: caofengbin <1050430934@qq.com> Date: Sat, 17 Jun 2023 15:51:08 +0800 Subject: [PATCH 3/5] =?UTF-8?q?tap=E6=93=8D=E4=BD=9C=E7=9A=84=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E8=AF=B7=E6=B1=82=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../driver/android/service/impl/UiaClientImpl.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/cloud/sonic/driver/android/service/impl/UiaClientImpl.java b/src/main/java/org/cloud/sonic/driver/android/service/impl/UiaClientImpl.java index 84e4468..c66894d 100644 --- a/src/main/java/org/cloud/sonic/driver/android/service/impl/UiaClientImpl.java +++ b/src/main/java/org/cloud/sonic/driver/android/service/impl/UiaClientImpl.java @@ -356,7 +356,18 @@ public void setAppiumSettings(JSONObject settings) throws SonicRespException { @Override public void tap(int x, int y) throws SonicRespException { - + checkSessionId(); + JSONObject data = new JSONObject(); + data.put("x", x); + data.put("y", y); + BaseResp b = respHandler.getResp(HttpUtil.createPost(remoteUrl + "/session/" + sessionId + "/appium/tap") + .body(data.toJSONString())); + if (b.getErr() == null) { + logger.info("perform tap action %s.", data.toString()); + } else { + logger.error("perform tap action failed."); + throw new SonicRespException(b.getErr().getMessage()); + } } @Override From efffb8de6c14917d9ce3804b90db0de99a447661 Mon Sep 17 00:00:00 2001 From: caofengbin <1050430934@qq.com> Date: Sat, 17 Jun 2023 16:08:40 +0800 Subject: [PATCH 4/5] =?UTF-8?q?longPress=E6=93=8D=E4=BD=9C=E7=9A=84?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E8=AF=B7=E6=B1=82=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sonic/driver/android/AndroidDriver.java | 2 +- .../driver/android/service/UiaClient.java | 2 +- .../android/service/impl/UiaClientImpl.java | 18 ++++++++++++++++-- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/cloud/sonic/driver/android/AndroidDriver.java b/src/main/java/org/cloud/sonic/driver/android/AndroidDriver.java index 8aa350f..31a9e6b 100644 --- a/src/main/java/org/cloud/sonic/driver/android/AndroidDriver.java +++ b/src/main/java/org/cloud/sonic/driver/android/AndroidDriver.java @@ -425,7 +425,7 @@ public void tap(int x, int y) throws SonicRespException { * @param ms * @throws SonicRespException */ - public void longPress(int x, int y, int ms) throws SonicRespException { + public void longPress(double x, double y, double ms) throws SonicRespException { uiaClient.longPress(x, y, ms); } diff --git a/src/main/java/org/cloud/sonic/driver/android/service/UiaClient.java b/src/main/java/org/cloud/sonic/driver/android/service/UiaClient.java index 4704ddf..10395f3 100644 --- a/src/main/java/org/cloud/sonic/driver/android/service/UiaClient.java +++ b/src/main/java/org/cloud/sonic/driver/android/service/UiaClient.java @@ -85,7 +85,7 @@ public interface UiaClient { void tap(int x, int y) throws SonicRespException; - void longPress(int x, int y, int ms) throws SonicRespException; + void longPress(double x, double y, double ms) throws SonicRespException; void swipe(int fromX, int fromY, int toX, int toY, Integer duration) throws SonicRespException; } diff --git a/src/main/java/org/cloud/sonic/driver/android/service/impl/UiaClientImpl.java b/src/main/java/org/cloud/sonic/driver/android/service/impl/UiaClientImpl.java index c66894d..7c6b43a 100644 --- a/src/main/java/org/cloud/sonic/driver/android/service/impl/UiaClientImpl.java +++ b/src/main/java/org/cloud/sonic/driver/android/service/impl/UiaClientImpl.java @@ -371,8 +371,22 @@ public void tap(int x, int y) throws SonicRespException { } @Override - public void longPress(int x, int y, int ms) throws SonicRespException { - + public void longPress(double x, double y, double ms) throws SonicRespException { + checkSessionId(); + JSONObject data = new JSONObject(); + JSONObject touchEventParams = new JSONObject(); + touchEventParams.put("x", x); + touchEventParams.put("y", y); + touchEventParams.put("duration", ms); + data.put("params", touchEventParams); + BaseResp b = respHandler.getResp(HttpUtil.createPost(remoteUrl + "/session/" + sessionId + "/touch/longclick") + .body(data.toJSONString())); + if (b.getErr() == null) { + logger.info("perform longPress action %s.", data.toString()); + } else { + logger.error("perform longPress action failed."); + throw new SonicRespException(b.getErr().getMessage()); + } } @Override From 3315d29121efac8ac4932cc691f9ea42031cd7b6 Mon Sep 17 00:00:00 2001 From: caofengbin <1050430934@qq.com> Date: Sat, 17 Jun 2023 16:11:36 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8A=A0=E7=9A=84swipe?= =?UTF-8?q?=EF=BC=8Ctap=EF=BC=8ClongPress=E6=96=B9=E6=B3=95=E5=8D=95?= =?UTF-8?q?=E5=85=83=E6=B5=8B=E8=AF=95=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../driver/android/AndroidDriverTest.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/test/java/org/cloud/sonic/driver/android/AndroidDriverTest.java b/src/test/java/org/cloud/sonic/driver/android/AndroidDriverTest.java index 1f270cb..94d3beb 100644 --- a/src/test/java/org/cloud/sonic/driver/android/AndroidDriverTest.java +++ b/src/test/java/org/cloud/sonic/driver/android/AndroidDriverTest.java @@ -159,4 +159,33 @@ public void testScreenshot() throws IOException, SonicRespException { public void testSetAppiumSettings() throws SonicRespException { androidDriver.setAppiumSettings(new JSONObject()); } + + @Test + public void testSwipeAction() throws SonicRespException { + // 默认滑动操作的完成时间,500毫秒 + androidDriver.swipe(540, 1710, 540, 200); + // 指定滑动操作在1000毫秒内完成 + androidDriver.swipe(540, 1710, 540, 200, 1000); + } + + @Test + public void testTapAction() throws SonicRespException { + // 替换为任意待测试的元素 + AndroidElement androidElement = androidDriver.findElement(AndroidSelector.Id, + "com.xueqiu.android:id/my_groups_new_title_bar_ding"); + ElementRect elementRect = androidElement.getRect(); + androidDriver.tap(elementRect.getX() + elementRect.getWidth() / 2, elementRect.getY() + elementRect.getHeight() / 2); + } + + @Test + public void testLongPressAction() throws SonicRespException { + // 替换为任意待测试的元素 + AndroidElement androidElement = androidDriver.findElement(AndroidSelector.Id, + "com.xueqiu.android:id/my_groups_list_item_stock_name_label"); + ElementRect elementRect = androidElement.getRect(); + androidDriver.longPress((double) elementRect.getX() + (double) elementRect.getWidth() / 2, + (double) elementRect.getY() + (double) elementRect.getHeight() / 2, + 100); + } + }