Appium Appium 如何创建多个 session,并且可以随意切换?主要为了测两个 App, 但是 App 之间有互动

杨雅洁 · 2014年07月29日 · 最后由 Arthur白 回复于 2018年01月04日 · 2912 次阅读

Appium 如何创建多个 session,并且可以随意切换?主要为了测两个 App, 但是 App 之间有互动。
我想的笨办法:
创建一个 session 打开一个 app,测试结束后退出,重新创建 session...有没有比较智能的办法多个 session,可以随时切换?

    @Test
    public void testtest() throws InterruptedException {

        CommonMethods.openManager();
        System.out.println("...........................Open Manager!!!!");
        CommonMethods.tearDown();
        CommonMethods.openMember();

        System.out.println("......................Open Member!!!!");        
        CommonMethods.tearDown();
    }


public class CommonMethods {

    private static AppiumDriver driver;

    public static void openManager() {

        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("deviceName", "Android");
        capabilities.setCapability("platformName", "Android");
        capabilities.setCapability("platformVersion", "4.4");
        capabilities.setCapability("appPackage", "net.everbridge");
        capabilities.setCapability("appActivity", ".ui.SplashUI");
        try {
            driver = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"),
                    capabilities);
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


    }


    public static void openMember() {

        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("deviceName", "Android");
        capabilities.setCapability("platformName", "Android");
        capabilities.setCapability("platformVersion", "4.4");
        capabilities.setCapability("appPackage", "com.everbridge.mobile.iv.recipient");
        capabilities.setCapability("appActivity", ".SplashActivity");
        try {
            driver = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"),
                    capabilities);
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    public static void tearDown() {
        driver.quit();
    }
}

共收到 15 条回复 时间 点赞

这个问题的核心要看,这两个 APP 之间是怎么互动?@monkey

请注意发帖规范。

@lihuazhang 下次我注意:),没注意有规范。

@qddegtya 两个 App 互动比较频繁,一个是发消息,一个是收消息,发出去的消息要在另一个 App 上确认能收到。

#4 楼 @yangyajie_002 通信机制是?

#4 楼 @yangyajie_002 怎么确认?看 app 的界面吗?还是需要抓包验证

@qddegtya 通过 google 的云信息处理,注册 device 发送消息

@luckystaff 通过 app 界面就可以看出来,抓包对我来说太难了。

匿名 #9 · 2014年08月17日

楼主这个问题有找到解决办法了么?

@link1220 可以通过改变端口创建新的 session,比如 hub 端口设置 4720,但是目前 session 之间切换还在研究,因为 session 无操作一段时间会 timeout,需要设置。

@yangyajie_002 hi, 请问一下, 你说的无操作一段时间 timeoute, 为了防止这种情况,该如何设置?谢谢

楼主这个问题解决没,我目前也遇到这个问题 ,不断交互后发出不了命令,卡在那,也不报任何错。

#11 楼 @honeybadger 启动 sercer 的时候设置 newCommandTimeout 即可

想问一下,两个 app 先后顺序测试,是否要开两个 appium server?

可以通过以下方法操纵第二个 APP,例如打开微信
Activity wechatActivity = new Activity("com.tencent.mm",".ui.LauncherUI");
driver.startActivity(wechatActivity);
/***
微信的各种动作
***/

Activity myActivity = new Activity("myAppPackage","myAppActivity");
driver.startActivity(myActivity );
/***
myApp 的各种动作
***/

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册