待測試的apk沒有安裝,並且通過appium運行時自動化安裝時報的錯誤提示信息如下:
[ADB] Using aapt.exe from D:\adt-bundle-windows-x86_64-20140702\sdk\build-tools\android-4.4W\aapt.exe
[ADB] Extracting package and launch activity from manifest
[ADB] Error: packageAndLaunchActivityFromManifest failed. Original error: Path must be a string. Received null
at Object.wrappedLogger.errorAndThrow (lib/logger.js:60:13)
at ADB.callee$0$0$ (lib/tools/android-manifest.js:88:9)
at tryCatch (C:\Users\Administrator\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\regenerator\runtime.js:67:40)
at GeneratorFunctionPrototype.invoke [as _invoke] (C:\Users\Administrator\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\regenerator\run
time.js:315:22)
at GeneratorFunctionPrototype.prototype.(anonymous function) [as next] (C:\Users\Administrator\AppData\Roaming\npm\node_modules\appium\node_modules\babel-ru
ntime\regenerator\runtime.js:100:21)
at GeneratorFunctionPrototype.invoke (C:\Users\Administrator\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\regenerator\runtime.js:136:3
7)
at run (C:\Users\Administrator\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\node_modules\core-js\library\modules\es6.promise.js:104:47
)
at C:\Users\Administrator\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\node_modules\core-js\library\modules\es6.promise.js:115:28
at flush (C:\Users\Administrator\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\node_modules\core-js\library\modules\$.microtask.js:19:5
)
at _combinedTickCallback (internal/process/next_tick.js:67:7)
at process._tickCallback (internal/process/next_tick.js:98:9)
[Error: packageAndLaunchActivityFromManifest failed. Original error: Path must be a string. Received null]
[debug] [AndroidDriver] Shutting down Android driver
[AndroidDriver] Cannot shut down Android driver; it has already shut down
[MJSONWP] Encountered internal error running command: Error: packageAndLaunchActivityFromManifest failed. Original error: Path must be a string. Received null
at Object.wrappedLogger.errorAndThrow (lib/logger.js:60:13)
at ADB.callee$0$0$ (lib/tools/android-manifest.js:88:9)
at tryCatch (C:\Users\Administrator\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\regenerator\runtime.js:67:40)
at GeneratorFunctionPrototype.invoke [as _invoke] (C:\Users\Administrator\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\regenerator\run
time.js:315:22)
at GeneratorFunctionPrototype.prototype.(anonymous function) [as next] (C:\Users\Administrator\AppData\Roaming\npm\node_modules\appium\node_modules\babel-ru
ntime\regenerator\runtime.js:100:21)
at GeneratorFunctionPrototype.invoke (C:\Users\Administrator\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\regenerator\runtime.js:136:3
7)
at run (C:\Users\Administrator\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\node_modules\core-js\library\modules\es6.promise.js:104:47
)
at C:\Users\Administrator\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\node_modules\core-js\library\modules\es6.promise.js:115:28
at flush (C:\Users\Administrator\AppData\Roaming\npm\node_modules\appium\node_modules\babel-runtime\node_modules\core-js\library\modules\$.microtask.js:19:5
)
at _combinedTickCallback (internal/process/next_tick.js:67:7)
at process._tickCallback (internal/process/next_tick.js:98:9)
[HTTP] <-- POST /wd/hub/session 500 5933 ms - 234
解決辦法如下:
1、手動安裝待測試的apk
2、根據appium的服務關鍵字的說明,說明如下:
關鍵字爲app的說明:針對Android系統,如果你指定app-package
和app-activity
的話,那麼就可以不指定app
所以解決辦法就在這裏,我們不指定app而指定 appPackage和appActivity關鍵字,具體代碼如下:
public class TestAPP {
private boolean isNeedInstall=false;
@SuppressWarnings("rawtypes")
private AppiumDriver driver=null;
public void testZhihu(){
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("deviceName","Android");
capabilities.setCapability("platformName","Android");
capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
capabilities.setCapability(CapabilityType.VERSION, "4.4");
capabilities.setCapability(CapabilityType.PLATFORM, "WINDOWS");
if(isNeedInstall){ //isNeedInstall爲真時appium需要解析本地的apk包來得到包名和mainActivity
String appDir=System.getProperty("user.dir");
File apppath=new File(appDir, "apps");
File app = new File(apppath, "txxy.apk");
capabilities.setCapability("app", app.getAbsolutePath());
}else { //isNeedInstall爲假時通過appium不需要解析apk直接通過appPackage和appActivity服務關鍵字的設置在目標手機上查找啓動app
capabilities.setCapability("appPackage", "com.pycredit.txxy");
capabilities.setCapability("appActivity", ".StartupActivity");
}
//支持中文輸入
capabilities.setCapability("unicodeKeyboard", "true");
//重置輸入法爲系統默認
capabilities.setCapability("resetKeyboard", "true");
//安裝時是否對apk進行重簽名,爲true不進行重簽名
capabilities.setCapability("noSign","true");
// capabilities.setCapability("noReset","true");
try {
driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
} catch (MalformedURLException e) {
e.printStackTrace();
}
try {
Thread.sleep(15000);
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
if(driver!=null){
driver.quit();
}
}
}
public static void main(String[] args) {
new TestAPP().testZhihu();
}
}
關鍵字 | 描述 | 實例 |
---|---|---|
automationName |
你想使用的自動化測試引擎 |
Appium (默認) 或 Selendroid |
platformName |
你要測試的手機操作系統 |
iOS , Android , 或 FirefoxOS |
platformVersion |
手機操作系統版本 |
例如: 7.1 , 4.4 |
deviceName |
使用的手機類型或模擬器類型 |
iPhone Simulator , iPad Simulator , iPhone
Retina 4-inch , Android Emulator , Galaxy S4 , 等。在
iOS 上,這個關鍵字的值必須是使用 instruments -s devices 得到的可使用的設備名稱之一。在 Android 上,這個關鍵字目前不起作用。 |
app |
.ipa or .apk 文件所在的本地絕對路徑或者遠程路徑,也可以是一個包括兩者之一的.zip 。
Appium會先嚐試安裝路徑對應的應用在適當的真機或模擬器上。針對Android系統,如果你指定app-package 和app-activity (具體見下面)的話,那麼就可以不指定app 。 會與browserName 衝突 |
比如/abs/path/to/my.apk 或http://myapp.com/app.ipa |
browserName |
需要進行自動化測試的手機 web 瀏覽器名稱。如果是對應用進行自動化測試,這個關鍵字的值應爲空。 | iOS 系統上可以用 'Safari' ,Android 系統上可以用 'Chrome', 'Chromium', 或 'Browser'。 |
newCommandTimeout |
設置命令超時時間,單位:秒。達到超時時間仍未接收到新的命令時 Appium 會假設客戶端退出然後自動結束會話。 |
比如 60 |
autoLaunch |
Appium是否需要自動安裝和啓動應用。默認值true |
true , false |
language |
(Sim/Emu-only) 設定模擬器 ( simulator / emulator ) 的語言。 |
如: fr |
locale |
(Sim/Emu-only) 設定模擬器 ( simulator / emulator ) 的區域設置。 |
如: fr_CA |
udid |
連接的物理設備的唯一設備標識 |
如: 1ae203187fc012g |
orientation |
(Sim/Emu-only) 在一個設定的方向模式中開始測試 |
LANDSCAPE (橫向) 或 PORTRAIT (縱向) |
autoWebview |
直接轉換到 WebView 上下文。 默認值 false 、 |
true , false |
noReset |
不要在會話前重置應用狀態。默認值false 。 |
true , false |
fullReset |
(iOS) 刪除整個模擬器目錄。(Android) 通過卸載——而不是清空數據——來重置應用狀態。在 Android 上,這也會在會話結束後自動清除被測應用。默認值 false |
true , false |
appActivity |
你要從你的應用包中啓動的 Android Activity 名稱。它通常需要在前面添加 . (如:使用.MainActivity 而不是 MainActivity ) |
MainActivity , .Settings |
appPackage |
你想運行的Android應用的包名 |
比如com.example.android.myApp , com.android.settings |