appium真机并发运行

appium端口和设备是一对一的关系,如果多台设备,都要通过手动执行命令的方式启动,过于麻烦,故直接在程序中开启appium服务,动态分配appium端口

命令:appium -a 127.0.0.1 -p 4723 -U 设备ID

程序动态开启:

public AppiumDriverLocalService startAppiumServer(StfDevicesFields fields) {
        //检测appium服务是否已经启动
        boolean isServerRunning = checkIfServerIsRunnning(fields);
        if (isServerRunning) {
            return service;
        }


        int port = fields.getAppiumServerPort();

        AppiumServiceBuilder builder = new AppiumServiceBuilder();
        builder.withIPAddress("127.0.0.1");
        builder.usingPort(port);
        builder.withArgument(GeneralServerFlag.SESSION_OVERRIDE);
        builder.withArgument(GeneralServerFlag.LOG_LEVEL, "error");

        //Start the server with the builder
        service = AppiumDriverLocalService.buildService(builder);
        service.start();

        return service;
    }

判断appium服务是否已经启动:

在linux服务可以通过以下方式检测

    public boolean checkIfServerIsRunnning(StfDevicesFields fields) {
        boolean isServerRunning = false;
        ServerSocket serverSocket;
        try {
            serverSocket = new ServerSocket(fields.getAppiumServerPort());
            serverSocket.close();
        } catch (IOException e) {
            isServerRunning = true;
        } finally {
            serverSocket = null;
        }
        return isServerRunning;
    }

在mac中,以上方式就不适用了,只能通过命令查找端口方式来处理

例如:lsof -i:4723 存在进程,则根据想要的结果处理即可

appium+android

DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, fields.getDeviceName()); // 设备名称
capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");// 平台名称
capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, fields.getVersion());// 系统版本号
capabilities.setCapability(AndroidMobileCapabilityType.APP_PACKAGE, "com.xx.xxxxx");// 包名
capabilities.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY, ".ui.SplashAnimActivity");
capabilities.setCapability(MobileCapabilityType.UDID, fields.getSerial());// 物理机的id
capabilities.setCapability(AndroidMobileCapabilityType.SYSTEM_PORT, fields.getSystemPort());
capabilities.setCapability(AndroidMobileCapabilityType.UNICODE_KEYBOARD, false);
capabilities.setCapability(AndroidMobileCapabilityType.RESET_KEYBOARD, false);
capabilities.setCapability(MobileCapabilityType.NO_RESET, true);


String path = "http://127.0.0.1:" + fields.getAppiumServerPort() + "/wd/hub";
URL url = new URL(path);

AndroidDriver driver = new AndroidDriver(url, capabilities);

//等待应用启动OK
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);

android设备多台并行的时候,需要动态设置systemport ,避免冲突。

appium+ios

DesiredCapabilities cap = new DesiredCapabilities();
cap.setCapability(MobileCapabilityType.UDID, fields.getSerial());// 设备ID
cap.setCapability(MobileCapabilityType.DEVICE_NAME, fields.getDeviceName()); // 设备名称
cap.setCapability(MobileCapabilityType.PLATFORM_NAME, "iOS");// 平台名称
 cap.setCapability(MobileCapabilityType.PLATFORM_VERSION, fields.getVersion());// 系统版本号
cap.setCapability(IOSMobileCapabilityType.BUNDLE_ID, "com.xx.xxxxxxx");
cap.setCapability(MobileCapabilityType.NO_RESET, true);
cap.setCapability(MobileCapabilityType.AUTOMATION_NAME, "XCUITest");
cap.setCapability(IOSMobileCapabilityType.AUTO_ACCEPT_ALERTS, true);
cap.setCapability(IOSMobileCapabilityType.WDA_LOCAL_PORT, fields.getWdaLocalPort());
cap.setCapability(IOSMobileCapabilityType.USE_NEW_WDA, false);
cap.setCapability(IOSMobileCapabilityType.START_IWDP, true);
cap.setCapability(IOSMobileCapabilityType.USE_PREBUILT_WDA, true);
cap.setCapability("useSimpleBuildTest",true);
cap.setCapability("wdaConnectionTimeout", 240000);

String path = "http://127.0.0.1:" + fields.getAppiumServerPort() + "/wd/hub";

driver = new IOSDriver<IOSElement>(new URL(path), cap);
driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);

ios单机测试时,wda端口会自动默认8100,但是多台设备并行时,需要自定义wda端口,避免冲突

1. wdaLocalPort:自定义wda端口
2. useNewWDA:为true, 则强制卸载设备上任何现有的WebDriverAgent应用程序,WebDriverAgent为每个会话应用不同的启动选项,默认false
3. startIWDP: 表示开启ios-webkit-debug-proxy工具
4. usePrebuiltWDA: 跳过运行WDA应用程序的构建阶段
5. useSimpleBuildTest: 这个很重要,可以设置不编译WebDriverAgentRunner-Runner.app,这样就不用重新手工信任描述文件,这个参数主要是建立与build使用和运行试验test在xcodebuild联编的所有版本的Xcode,如果是true,或建立具有build-for-testing与运行测试test-without-building超过Xcode中8,如果这是false。默认为false。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值