Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在一个套件中执行多个测试用例时,如何在不反复安装的情况下打开android应用程序?_Java_Appium - Fatal编程技术网

Java 在一个套件中执行多个测试用例时,如何在不反复安装的情况下打开android应用程序?

Java 在一个套件中执行多个测试用例时,如何在不反复安装的情况下打开android应用程序?,java,appium,Java,Appium,使用driver.launchApp()时每次都会重新安装我的应用程序。那么我怎样才能防止这种情况呢 DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability(CapabilityType.BROWSER_NAME, "Android"); capabilities.setCapability(CapabilityType.VERSION, Androi

使用driver.launchApp()时每次都会重新安装我的应用程序。那么我怎样才能防止这种情况呢

    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability(CapabilityType.BROWSER_NAME, "Android");
    capabilities.setCapability(CapabilityType.VERSION, Android_Version);
    capabilities.setCapability(CapabilityType.PLATFORM, "Android");
    capabilities.setCapability("platformName", "Android");
    capabilities.setCapability("deviceName", DeviceName);
    capabilities.setCapability("app", app.getAbsolutePath());
    capabilities.setCapability("app-package", app_package);
    capabilities.setCapability("app-activity", app_activity);

    try{
        driver = new AndroidDriver<WebElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
        driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
        APP_LOGS.info("Appium driver is initialized!!");
        driver.closeApp();
       }

您可以执行一个或多个操作来一次又一次地停止安装应用程序


a设置appium--无重置标志为true:当我们不想在会话之间重置应用程序状态时,使用此标志(IOS:不删除应用程序列表文件;Android:在新会话之前不卸载应用程序)。其默认值为False

您可以使用“appium--no reset”命令启动appium服务器,或包括以下服务器功能:

capabilities.setCapability("noReset","true");

b确保--full reset标志为False::(iOS)删除整个模拟器文件夹。(Android)通过卸载应用程序而不是清除应用程序数据来重置应用程序状态。在Android上,这也会在会话完成后删除应用程序。默认为false

capabilities.setCapability("fullReset","false");

c。我认为您需要从测试用例中删除launceApp()和closeApp()方法,而不是只编写测试用例代码instde@testcase方法

d。只需确保您的应用程序已经安装在设备上,而且单元测试的默认执行顺序类似于@Before@test和@After,因此您的安装方法将首先运行测试用例,最后运行拆卸方法。因此Setup()将包含服务器功能和测试环境。规范和拆卸()将用于关闭/退出应用程序

您可以在下面找到我的相同代码:

@Before
public void setup(){
    DesiredCapabilities capabilities = new DesiredCapabilities();
            capabilities.setCapability("noReset","true");
            capabilities.setCapability("fullReset","false");
            capabilities.setCapability("automationName","Appium");
            capabilities.setCapability("platformName", "Android");
            capabilities.setCapability("VERSION", "5.1.1");
            capabilities.setCapability("deviceName", "LG Nexus 5");
            capabilities.setCapability("appPackage", "com.packageName");
            capabilities.setCapability("appActivity", "ui.activity.SplashScreenActivity");
driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
}

@Test
public void sampleTest(){
//Testing Code Only
}

//To Exit/Quit close the driver
    @After
    public void teardown() {
        if (driver != null)
            driver.quit();
    }

希望您觉得这很有用,谢谢您的建议,在每个测试用例中使用driver.launch()和driver.close()的原因是“确保每个测试用例中都有驱动程序对象”。删除这些后,如果我的任何测试用例由于应用程序崩溃而失败,那么我套件的所有其他测试用例将自动失败。有没有其他方法可以确保我的套件的所有测试用例都能运行,然后请告诉我。使用您的代码后,我遇到了另一个异常,无法创建新会话。(原始错误:启动活动的权限被拒绝。)(警告:服务器未提供任何stacktrace信息)在android清单中,在您希望打开的活动中,添加android:exported=“true”,应该可以正常工作。否则,您需要启动默认的“ui.splash.SplashActivity”,它始终有效。另外,请确保在设置->开发选项中,设备处于调试模式,并且只安装了一个最新版本的应用程序。如果这不起作用,请给我一个反馈。Darshan我在我的项目中找不到清单文件,但SplashActivity起作用了。另一件事,我想打开应用程序在其以前的状态>,例如:在我的第一个测试用例中,我登录并到达主屏幕在第二个测试用例中,我想在主屏幕上执行一些活动,但当我在第二个测试用例中使用driver.launchApp()时,我的应用程序将在初始状态(登录屏幕)下打开。如何在整个Appium套件中保持应用程序的状态。如果我没有错,您可能需要保留应用程序的状态,但我建议不要这样做,因为这样做可能会使您的测试用例相互依赖,这不是一个好做法,如果您想在另一个测试用例中使用一个测试用例生成的数据,最好将其存储在变量中并重新生成状态。
@Before
public void setup(){
    DesiredCapabilities capabilities = new DesiredCapabilities();
            capabilities.setCapability("noReset","true");
            capabilities.setCapability("fullReset","false");
            capabilities.setCapability("automationName","Appium");
            capabilities.setCapability("platformName", "Android");
            capabilities.setCapability("VERSION", "5.1.1");
            capabilities.setCapability("deviceName", "LG Nexus 5");
            capabilities.setCapability("appPackage", "com.packageName");
            capabilities.setCapability("appActivity", "ui.activity.SplashScreenActivity");
driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
}

@Test
public void sampleTest(){
//Testing Code Only
}

//To Exit/Quit close the driver
    @After
    public void teardown() {
        if (driver != null)
            driver.quit();
    }