Appium+Java多台设备连接时实现设备切换

参考:
Appium-控制多台安卓设备执行的入门级实现


1. 配置多台安卓模拟器

使用夜神模拟器的夜神多开器配置两台安卓模拟器并全部启动。
Appium+Java多台设备连接时实现设备切换_第1张图片

2. 使用命令行查看设备信息

cmd中输入adb devices

Appium+Java多台设备连接时实现设备切换_第2张图片
可以看到连接上了两台安卓设备,若需要知道端口号与设备的对应关系,可以关闭一台安卓模拟器,再运行adb devices

这里我们关闭了夜神模拟器的模拟器,如下图所示。
Appium+Java多台设备连接时实现设备切换_第3张图片
在这里插入图片描述
端口号为62001的设备状态为offline,可见名称为夜神模拟器的模拟器,其端口号为62001。

3. Appium server设置与启动

打开两个cmd。

其中一个cmd输入:

appium -p 4723 -U 127.0.0.1:62001 -bp 4724

含义是:

  • 设置Server Port为4723。
  • 设置UDID为127.0.0.1:62001。
  • 设置Android Bootstrap Port为4724。

另一个cmd输入:

appium -p 4725 -U 127.0.0.1:62025 -bp 4726

含义是:

  • 设置Server Port为4725。
  • 设置UDID为127.0.0.1:62025。
  • 设置Android Bootstrap Port为4726。

如图所示:
Appium+Java多台设备连接时实现设备切换_第4张图片
这样就完成了两个Appium Server的启动。

4. 实现多台设备切换

在脚本中通过对URL的修改,可以实现设备的切换。
(注意:脚本中的deviceName无论写什么,Appium都是使用的adb lists devices中的第一个。因此有些博客通过修改deviceName来实现设备的切换的做法是无效的)

首先将URL设置为http://127.0.0.1:4723/wd/hub
Appium+Java多台设备连接时实现设备切换_第5张图片
执行脚本效果为:

http://127.0.0.1:4723/wd/hub测试

然后将URL设置为http://127.0.0.1:4725/wd/hub

Appium+Java多台设备连接时实现设备切换_第6张图片

执行脚本效果为:

http://127.0.0.1:4725/wd/hub测试

5. 两台设备共同执行

这里给出Python代码

#coding=utf-8
'''
Created on 2017/12/24 0024
@author:Changge
'''

from appium import webdriver
import time
import threading

desired_caps = {
    'platformName':'Android',
    'deviceName':'127.0.0.1:62001',
    'platformVersion':'5.1.1',
    'appPackage':'com.taobao.taobao',
    'appActivity':'com.taobao.tao.welcome.Welcome',
}

desired_caps2 = {
    'platformName':'Android',
    'deviceName':'127.0.0.1:62025',
    'platformVersion':'4.4.2',
    'appPackage':'com.taobao.taobao',
    'appActivity':'com.taobao.tao.welcome.Welcome',
}
def task1():
    driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
    ##休眠20s等待页面加载完成
    time.sleep(20)
    print(driver.contexts)
    driver.quit()

def task2():
    driver = webdriver.Remote('http://127.0.0.1:4725/wd/hub', desired_caps2)
    ##休眠20s等待页面加载完成
    time.sleep(20)
    print(driver.contexts)
    driver.quit()

threads = []
t1 = threading.Thread(target=task1)
threads.append(t1)

t2 = threading.Thread(target=task2)
threads.append(t2)

if __name__ == '__main__':
    for t in threads:
        t.start()

你可能感兴趣的:(#,appium,前端,数据库,android)