【问题标题】:Activity used to start the app doesn't exist or cannot be launched Appium用于启动应用的 Activity 不存在或无法启动 Appium
【发布时间】:2019-08-01 23:37:32
【问题描述】:

我正在使用此代码,但无法在我的移动设备上启动应用程序

package Mobileapp1;
.
.
import io.appium.java_client.remote.MobileCapabilityType;

public class Apptesting
{
    public static void main(String[] args) throws MalformedURLException
    {
    DesiredCapabilities c=new DesiredCapabilities();
    c.setCapability(CapabilityType.BROWSER_NAME, "");
    c.setCapability("deviceName", "ZZ2222HMLF");
    c.setCapability("platformName", "Android");
    c.setCapability("platformversion", "7.0");
    c.setCapability(MobileCapabilityType.APP, "D:\\Appium\\edTheSIS_11_02_2019.apk");
    c.setCapability("noReset", true);
    c.setCapability("autoGrantPermissions", "true");
    c.setCapability("appPackage","com.sisapp.in.sisapp");
    //c.setCapability("appPackage","com.sisapp.in.sisapp.SplashActivity"); Tried not working same issue
    c.setCapability("appActivity", "SplashActivity");
    //c.setCapability("appActivity",".md5b1afd03e09ce5243fd0287b176ff38ea.MainActivity");
    URL U=new URL("http://127.0.0.1:4723/wd/hub");
    WebDriver driver=new AndroidDriver(U,c);
    //driver.findElement(By.linkText("Username")).sendKeys("as@ct");
    }
}

TLDR:

原始错误:用于启动应用程序的活动名称“.SplashActivity” 不存在或无法启动!确保它存在并且是 可启动的活动

以下是我的错误日志

log4j:WARN 找不到记录器的附加程序 (org.apache.http.client.protocol.RequestAddCookies)。 log4j:请警告 正确初始化 log4j 系统。 log4j:WARN 见 http://logging.apache.org/log4j/1.2/faq.html#noconfig 了解更多信息。 线程“主”org.openqa.selenium.WebDriverException 中的异常:一个 处理命令时发生未知的服务器端错误。 原始错误:无法启动“com.sisapp.in.sisapp”应用程序。 访问 https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/android/activity-startup.md 用于故障排除。原始错误:无法启动 'com.sisapp.in.sisapp' 应用程序。访问 https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/android/activity-startup.md 用于故障排除。原始错误:活动名称'.SplashActivity' 用于启动的应用程序不存在或无法启动!确保 它存在并且是一个可启动的活动构建信息:版本:'3.8.1', 修订:'6e95a6684b',时间:'2017-12-01T19:05:14.666Z' 系统信息: 主机:“DELL30”,IP:“10.10.4.222”,os.name:“Windows 7”,os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_151' 驱动信息: driver.version:AndroidDriver 远程堆栈跟踪:UnknownError:An 处理命令时发生未知的服务器端错误。 原始错误:无法启动“com.sisapp.in.sisapp”应用程序。 访问 https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/android/activity-startup.md 用于故障排除。原始错误:无法启动 'com.sisapp.in.sisapp' 应用程序。访问 https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/android/activity-startup.md 用于故障排除。原始错误:活动名称'.SplashActivity' 用于启动的应用程序不存在或无法启动!确保 它存在并且是可启动的活动 在 getResponseForW3CError (C:\Users\arvind\AppData\Local\appium-desktop\app-1.10.0\resources\app\node_modules\appium-base-driver\lib\protocol\errors.js:826:9) 在 asyncHandler (C:\Users\arvind\AppData\Local\appium-desktop\app-1.10.0\resources\app\node_modules\appium-base-driver\lib\protocol\protocol.js:447:37) 在 process._tickCallback (internal/process/next_tick.js:68:7) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(未知 来源)在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知 来源)在 java.lang.reflect.Constructor.newInstance(未知来源) 在 org.openqa.selenium.remote.W3CHandshakeResponse.lambda$new$0(W3CHandshakeResponse.java:57) 在 org.openqa.selenium.remote.W3CHandshakeResponse.lambda$getResponseFunction$2(W3CHandshakeResponse.java:104) 在 org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$0(ProtocolHandshake.java:123) 在 java.util.stream.ReferencePipeline$3$1.accept(Unknown Source) at java.util.Spliterators$ArraySpliterator.tryAdvance(未知来源)在 java.util.stream.ReferencePipeline.forEachWithCancel(未知来源) 在 java.util.stream.AbstractPipeline.copyIntoWithCancel(未知 来源)在 java.util.stream.AbstractPipeline.copyInto(未知来源) 在 java.util.stream.AbstractPipeline.wrapAndCopyInto(未知来源) 在 java.util.stream.FindOps$FindOp.evaluateSequential(未知来源) 在 java.util.stream.AbstractPipeline.evaluate(Unknown Source) 在 java.util.stream.ReferencePipeline.findFirst(未知来源)在 org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:126) 在 org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:73) 在 org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:142) 在 io.appium.java_client.remote.AppiumCommandExecutor.execute(AppiumCommandExecutor.java:89) 在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:601) 在 io.appium.java_client.DefaultGenericMobileDriver.execute(DefaultGenericMobileDriver.java:42) 在 io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:1) 在 io.appium.java_client.android.AndroidDriver.execute(AndroidDriver.java:1) 在 org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:219) 在 org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:142) 在 io.appium.java_client.DefaultGenericMobileDriver.(DefaultGenericMobileDriver.java:38) 在 io.appium.java_client.AppiumDriver.(AppiumDriver.java:83) 在 io.appium.java_client.AppiumDriver.(AppiumDriver.java:93) 在 io.appium.java_client.android.AndroidDriver.(AndroidDriver.java:72) 在 Mobileapp1.Apptesting.main(Apptesting.java:29)

【问题讨论】:

    标签: selenium automation automated-tests appium


    【解决方案1】:

    如果您使用 app 能力,则无需指定 appPackageappActivity 能力。此外,如果您不测试本机应用,则不需要 browserName 功能。

    DesiredCapabilities c=new DesiredCapabilities();
    c.setCapability("deviceName", "ZZ2222HMLF");
    c.setCapability("platformName", "Android");
    c.setCapability("app", "D:\\Appium\\edTheSIS_11_02_2019.apk");
    c.setCapability("noReset", true);
    c.setCapability("autoGrantPermissions", "true");
    URL U=new URL("http://127.0.0.1:4723/wd/hub");
    AppiumDriver<MobileElement> driver=new AndroidDriver(U,c);
    

    如果您想了解应用的appPackageappActivity,可以将设备连接到计算机,打开应用并运行以下命令:

    adb shell
    dumpsys window windows | grep -E 'mFocusedApp'
    

    这将显示您的 appActivity 和 appPackage。要了解更多信息,您可以查看this link

    【讨论】:

      【解决方案2】:

      对我来说,使用“appActivity”的完整路径通常有效:

      c.setCapability("appPackage","com.sisapp.in.sisapp.SplashActivity");
      

      或者您的开始活动可能有不同的名称。然后通过ADB手动启动应用后尝试找出当前活动的真实名称:

      adb shell dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'
      

      adb shell dumpsys activity
      

      【讨论】:

        【解决方案3】:

        尝试下面提到的依赖项,您可以在不提及 MainActivity 的情况下启动应用程序。

        1. 确保 Appium 服务器在执行代码之前正在运行
        2. 要验证您可以使用 Appium 检查器会话并放置所需的功能,请尝试启动一个会话。这是验证所需功能的最可靠和最简单的方法。

          DesiredCapabilities cap = new DesiredCapabilities();
          File appDir = new File("Folder path to .apk file location");
          File newApp = new File (appDir ,"Project.apk" );
          
                  /* ANDROID DEPENDENCIES START*/
          
                  cap.setCapability(CapabilityType.BROWSER_NAME, "");
                  cap.setCapability("deviceName", "Nexus5XAPI26");
                  cap.setCapability("udid", "YourDeviceUDID");
                  cap.setCapability("platformName", "Android");
                  cap.setCapability("platformVersion","7.1.1");
                  cap.setCapability("automationName", "UiAutomator2");
                  cap.setCapability("app", newApp.getAbsolutePath());
          
                  /* ANDROID DEPENDENCIES END */
          
          cap.setCapability("app", newApp.getAbsolutePath());
          appDriver = new AppiumDriver(new URL("http://0.0.0.0:4723/wd/hub"), cap);
          

        【讨论】:

          猜你喜欢
          • 2015-06-14
          • 2015-02-10
          • 2018-10-25
          • 1970-01-01
          • 2016-06-18
          • 1970-01-01
          • 1970-01-01
          • 2020-12-01
          • 2018-03-26
          相关资源
          最近更新 更多