Skip to content
This repository was archived by the owner on Oct 5, 2023. It is now read-only.

Commit

Permalink
better
Browse files Browse the repository at this point in the history
  • Loading branch information
jiangyitao committed Nov 12, 2020
1 parent 70a775d commit 844f066
Show file tree
Hide file tree
Showing 7 changed files with 36 additions and 27 deletions.
11 changes: 1 addition & 10 deletions src/main/java/com/daxiang/action/MobileAction.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,15 @@
import com.daxiang.core.action.annotation.Action;
import com.daxiang.core.action.annotation.Param;
import com.daxiang.core.mobile.MobileDevice;
import com.daxiang.utils.FileUtil;
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.TouchAction;
import io.appium.java_client.touch.WaitOptions;
import io.appium.java_client.touch.offset.PointOption;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.*;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;

import java.io.File;
import java.io.IOException;
import java.time.Duration;

Expand Down Expand Up @@ -56,13 +53,7 @@ public void switchContext(@Param(possibleValues = "[{'value': 'NATIVE_APP', 'des
@Action(id = 1001, name = "安装App", platforms = {1, 2})
public void installApp(@Param(description = "app下载地址") String appDownloadUrl) throws IOException {
Assert.hasText(appDownloadUrl, "appDownloadUrl不能为空");

File app = FileUtil.downloadFile(appDownloadUrl);
try {
mobileDevice.installApp(app);
} finally {
FileUtils.deleteQuietly(app);
}
mobileDevice.installApp(appDownloadUrl);
}

@Action(id = 1002, name = "卸载App", platforms = {1, 2})
Expand Down
8 changes: 5 additions & 3 deletions src/main/java/com/daxiang/core/mobile/MobileDevice.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import org.dom4j.DocumentException;
import org.json.XML;

import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.Map;
Expand Down Expand Up @@ -41,8 +40,11 @@ public MobileDevice(Mobile mobile, AppiumServer appiumServer) {

public abstract void uninstallApp(String app) throws Exception;

public void installApp(File appFile) {
((AppiumDriver) driver).installApp(appFile.getAbsolutePath());
/**
* @param app 本地路径 or 下载地址
*/
public void installApp(String app) {
((AppiumDriver) driver).installApp(app);
}

@Override
Expand Down
24 changes: 22 additions & 2 deletions src/main/java/com/daxiang/core/mobile/android/AndroidDevice.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import com.daxiang.core.mobile.android.stf.Minitouch;
import com.daxiang.core.mobile.appium.AndroidNativePageSourceHandler;
import com.daxiang.core.mobile.appium.AppiumServer;
import com.daxiang.utils.FileUtil;
import com.daxiang.utils.Terminal;
import com.daxiang.utils.UUIDUtil;
import io.appium.java_client.android.AndroidDriver;
Expand All @@ -32,6 +33,7 @@

import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.attribute.PosixFilePermission;
Expand Down Expand Up @@ -129,18 +131,36 @@ public boolean greaterOrEqualsToAndroid5() {
}

@Override
public void installApp(File appFile) {
public void installApp(String app) {
boolean appIsUrl = true;
try {
new URL(app);
} catch (MalformedURLException e) {
appIsUrl = false;
}

if (appIsUrl) {
try {
app = FileUtil.downloadFile(app).getAbsolutePath();
} catch (IOException e) {
throw new RuntimeException(e);
}
}

ScheduledExecutorService scheduleService = handleInstallBtnAsync();
try {
// 若使用appium安装,将导致handleInstallBtnAsync无法继续处理安装时的弹窗
// 主要因为appium server无法在安装app时,响应其他请求,所以这里用ddmlib安装
AndroidUtil.installApk(iDevice, appFile.getAbsolutePath());
AndroidUtil.installApk(iDevice, app);
} catch (InstallException e) {
throw new RuntimeException(String.format("[%s]安装app失败: %s", getId(), e.getMessage()), e);
} finally {
if (!scheduleService.isShutdown()) {
scheduleService.shutdown();
}
if (appIsUrl) {
FileUtils.deleteQuietly(new File(app));
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ protected MobileDevice initMobile(IDevice iDevice, AppiumServer appiumServer) th

// 安装一个测试apk,用于初始化appium driver
log.info("[{}]开始安装{}", mobileId, APIDEMOS_APK);
androidDevice.installApp(new File(APIDEMOS_APK));
androidDevice.installApp(new File(APIDEMOS_APK).getAbsolutePath());
log.info("[{}]安装{}完成", mobileId, APIDEMOS_APK);
}

Expand Down
12 changes: 2 additions & 10 deletions src/main/java/com/daxiang/core/mobile/ios/IosDevice.java
Original file line number Diff line number Diff line change
Expand Up @@ -88,16 +88,8 @@ protected Capabilities newCaps(Capabilities capsToMerge) {
}

@Override
public void installApp(File appFile) {
if (appFile.getName().endsWith(".ipa")) {
try {
IosUtil.installAppByIdeviceinstaller(getId(), appFile.getAbsolutePath());
} catch (IOException e) {
throw new RuntimeException(e);
}
} else {
super.installApp(appFile);
}
public void installApp(String app) {
IosUtil.installApp(driver, app);
}

@Override
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/com/daxiang/core/mobile/ios/IosUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,10 @@ public static void installAppByIdeviceinstaller(String mobileId, String appPath)
Terminal.execute(String.format(cmd, mobileId, appPath));
}

public static void installApp(RemoteWebDriver driver, String app) {
driver.executeScript("mobile: installApp", ImmutableMap.of("app", app));
}

public static void uninstallApp(RemoteWebDriver driver, String bundleId) {
driver.executeScript("mobile: removeApp", ImmutableMap.of("bundleId", bundleId));
}
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/daxiang/service/MobileService.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public void installApp(MultipartFile app, String mobileId) {

try {
FileUtils.copyInputStreamToFile(app.getInputStream(), appFile);
((MobileDevice) device).installApp(appFile);
((MobileDevice) device).installApp(appFile.getAbsolutePath());
} catch (Exception e) {
log.error("[{}]安装app失败", mobileId, e);
throw new AgentException(e.getMessage());
Expand Down

0 comments on commit 844f066

Please sign in to comment.