Appium 错误:Logcat 捕获失败:使用 Android Studio 生成 ENOENT

Posted

技术标签:

【中文标题】Appium 错误:Logcat 捕获失败:使用 Android Studio 生成 ENOENT【英文标题】:Appium error: Logcat capture failed: spawn ENOENT With Android Studio 【发布时间】:2018-02-24 06:52:51 【问题描述】:

我正在使用 android Studio 中的 Appium + WebDriver 为 Android 模拟器运行一个简单的计算器测试。我已经手动启动了 Appium Server 和 Android Emulator,然后使用 TestNG.xml 运行测试。

这是我的示例 WebDriver 代码 -

package com.example.user.mysampleapp2;

/**
 * Created by CParmar on 14-09-2017.
 */

import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import org.testng.annotations.*;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;

import io.appium.java_client.remote.MobileCapabilityType;
import io.appium.java_client.remote.MobilePlatform;

public class SampleTests 
    public WebDriver driver;

    @BeforeClass
    public void setUp() throws MalformedURLException 
        // Created object of DesiredCapabilities class.
        DesiredCapabilities capabilities = new DesiredCapabilities();

        // Set android deviceName desired capability. Set your device name.
        capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Nexus_6_API_25");

        // Set BROWSER_NAME desired capability. It's Android in our case here.
        capabilities.setCapability(MobileCapabilityType.BROWSER_NAME, "Android");

        // Set android VERSION desired capability. Set your mobile device's OS version.
        capabilities.setCapability(MobileCapabilityType.VERSION, "7.1.1");

        // Set android platformName desired capability. It's Android in our case here.
        capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, MobilePlatform.ANDROID);

        // Set android appPackage desired capability. It is
        // com.android.calculator2 for calculator application.
        // Set your application's appPackage if you are using any other app.
        capabilities.setCapability("appPackage", "com.android.calculator2");

        // Set android appActivity desired capability. It is
        // com.android.calculator2.Calculator for calculator application.
        // Set your application's appPackage if you are using any other app.
        capabilities.setCapability("appActivity", "com.android.calculator2.Calculator");

        // Created object of RemoteWebDriver will all set capabilities.
        // Set appium server address and port number in URL string.
        // It will launch calculator app in android device.
        driver = new RemoteWebDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    

    @Test
    public void testFirstCalculator() 

        // Click on DELETE/CLR button to clear result text box before running test.
        driver.findElements(By.xpath("//android.widget.Button")).get(0).click();

        // Click on number 2 button.
        driver.findElement(By.name("7")).click();

        driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);
    

    @AfterClass
    public void End() 
        driver.quit();
    

当我从 Android Studio 运行它时,我遇到了 Appium 错误。

使用命令启动 Appium 服务器:C:\Program Files (x86)\Appium\node.exe lib\server\main.js --address 127.0.0.1 --port 4723 --platform-name Android --platform-版本 23 --automation-name Appium --log-no-color 信息:欢迎使用 Appium v​​1.4.16 (REV ae6877eff263066b26328d457bd285c0cc62430d) 信息:Appium REST http 接口监听器开始于 127.0.0.1:4723 信息:[调试]非默认服务器参数:“address”:“127.0.0.1”,“logNoColors”:true,“platformName”:“Android”,“platformVersion”:“23”,“automationName”:“Appium " 信息:控制台日志级别:调试 info: --> POST /wd/hub/session "desiredCapabilities":"appPackage":"com.android.calculator2","appActivity":"com.android.calculator2.Calculator","browserName":"Android ","platformName":"Android","deviceName":"Nexus_6_API_25","version":"7.1.1","requiredCapabilities":,"capabilities":"desiredCapabilities":"appPackage": "com.android.calculator2","appActivity":"com.android.calculator2.Calculator","browserName":"Android","platformName":"Android","deviceName":"Nexus_6_API_25","version": "7.1.1","requiredCapabilities":,"alwaysMatch":"browserName":"Android","platformName":"Android","firstMatch":[] 信息:客户端用户代理字符串:Apache-HttpClient/4.5.3 (Java/1.8.0_131) info: [debug] 提供了以下所需功能,但 appium 无法识别。它们将被传递到此服务器上运行的任何其他服务。 : 版本 信息:[调试] 没有得到应用程序但得到了 Android 包,将尝试在设备上启动它 信息:[调试] 创建新的 appium 会话 42818f6f-0677-486a-bc53-efa31009bbe7 信息:启动 android appium 信息:[调试] 获取 Java 版本 信息:Java 版本为:1.8.0_131 info: [debug] 检查 adb 是否存在 警告:ANDROID_HOME 环境变量未设置为 Android SDK 根目录路径。与 SDK 23+ 兼容需要 ANDROID_HOME。沿着 PATH 检查 adb。 info: [debug] 执行 cmd: where adb 信息:[调试] 使用 C:\Users\CParmar\AppData\Local\Android\sdk\platform-tools\adb.exe 中的 adb

警告:没有应用功能,无法解析包/活动 信息:[调试] 使用快速重置?真的 信息:[调试] 为会话准备设备 信息:[调试]不检查应用程序是否存在,因为我们假设它已经在设备上 信息:检索设备 信息:[调试] 尝试查找已连接的 android 设备 信息:[调试]正在连接设备... 信息:[调试] 执行 cmd:“C:\Users\CParmar\AppData\Local\Android\sdk\platform-tools\adb.exe”设备 信息:[调试] 1 个设备已连接 信息:找到设备模拟器-5554 信息:[调试] 将设备 ID 设置为 emulator-5554 信息:[调试] 等待设备准备好并响应 shell 命令(超时 = 5) 信息:[调试] 执行 cmd:“C:\Users\CParmar\AppData\Local\Android\sdk\platform-tools\adb.exe”-s emulator-5554 等待设备 信息:[调试] 执行 cmd:“C:\Users\CParmar\AppData\Local\Android\sdk\platform-tools\adb.exe”-s emulator-5554 shell “echo 'ready'” 信息:[调试] 启动 logcat 捕获 错误:Logcat 捕获失败:spawn "C:\Users\CParmar\AppData\Local\Android\sdk\platform-tools\adb.exe" ENOENT info: [debug] 停止 logcat 捕获

我浏览了论坛上所有可用的帖子,还在 Android Studio 运行配置 (Android_Home) 中使用 SDK 路径设置 ANDROID_HOME 变量。我仍然收到此错误。

有什么帮助吗?

谢谢, 钱德雷什·帕尔玛

【问题讨论】:

【参考方案1】:

您可以按照这些answers 修复正在设置的ANDROID_HOME 环境变量。 同时,我建议安装 appium-doctor 并在执行 appium 测试之前检查您的环境设置中缺少的内容。

在你的情况下:

npm install appium-doctor -g
appium-doctor --android

您期望得到的回应是:

### Diagnostic starting ###
✔ The Node.js binary was found at: /usr/local/bin/node
✔ Node version is 7.9.0
✔ ANDROID_HOME is set to: /Users/<user>/Library/Android/sdk
✔ JAVA_HOME is set to: /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
✔ adb exists at: /Users/<user>/Library/Android/sdk/platform-tools/adb
✔ android exists at: /Users/<user>/Library/Android/sdk/tools/android
✔ emulator exists at: /Users/<user>/Library/Android/sdk/tools/emulator
✔ Bin directory of $JAVA_HOME is set
### Diagnostic completed, no fix needed. ###

修复所有x 标记,祝你好运

【讨论】:

【参考方案2】:

从错误日志中可以清楚地看到,ANDROID_HOME环境变量没有设置。

例如:您在“C:\Users\YourUserName\AndroidSDK”中安装了 Android SDK,那么 ANDROID_HOME 路径的值将是相同的路径。

只需添加名称为 ANDROID_HOME 和值作为路径的新环境变量。

还有你的 appium 版本非常旧(1.4.16)。我建议你将它升级到 1.6.3,这是目前为止非常稳定的 appium 版本

【讨论】:

我已经将 ANDROID_HOME 变量设置为安装在我的机器和 Android Studio 上的 Android SDK。见下图。

以上是关于Appium 错误:Logcat 捕获失败:使用 Android Studio 生成 ENOENT的主要内容,如果未能解决你的问题,请参考以下文章

出现“Posix 生成失败”错误 - Appium iOS

packageAndLaunchActivityFromManifest 失败的 appium 错误

USB忙时捕获LogCat(到SD卡)

Appium遇到的坑环境配置无误,路径无中文,无空格,提示error: Logcat capture failed: spawn ENOENT

AWS appium ios 测试总是失败

TestNG中Appium测试用例的顺序执行导致测试用例失败