複数のモバイルデバイスを搭載したAndroidプラットフォームでテストを並行して自動化することはできません。Appiumの異なるサーバーでの並列実行
システムに2台のデバイスを接続し、モバイルデバイスの名前とバージョンなどの機能を提供する場合、最初にADB
から認識されるデバイスで実行されます。
異なるポートでappiumサーバを起動しようとした場合、上の実行にappiumを制限する方法AppiumServiceBuilder()
2)とのセッションを無効にする方法
new AppiumServiceBuilder().usingAnyFreePort() I am getting Null pointer Exception.
[36minfo[39m: Appium REST http interface listener started on 0.0.0.0:2583
[36minfo[39m: [debug] Non-default server args: {"port":2583}
1)能力を備えた装置、さらに2台以上の装置が接続されている。
マイコード:
public class ApiumMain {
public static void main(String[] args) {
new Thread(new Device_Thread("4897bb00", "6.0.1")).start();
// new Thread(new Device_Thread("TA64301YVY", "5.0.1")).start();
}
}
public class Device_Thread extends ApiumMain implements Runnable {
public String mobileDeviceName;
public String androidVersion;
public Device_Thread(String mobile, String version) {
mobileDeviceName = mobile;
androidVersion = version;
}
@Override
public void run() {
String hsotMachineIP = "127.0.0.1";
Integer seleniumProt = 4723; /*Default {"port":4723}*/
String nodeJSExecutable = "C:\\Program Files (x86)\\Appium\\node.exe";
String appiumJS = "C:\\Program Files (x86)\\Appium\\node_modules\\appium\\bin\\appium.js";
Integer nodeJSPort = (int)(Math.random() * 8000) + 1000;
startAppium(nodeJSExecutable, nodeJSPort, appiumJS, mobileDeviceName, androidVersion, hsotMachineIP, seleniumProt);
}
public void startAppium(String nodeJSExecutable, int nodeJSPort, String appiumJS,
String mobileDeviceName, String androidVersion, String hsotMachineIP, int seleniumProt) {
RemoteWebDriver driver = null;
String appURL = "http://www.w3schools.com/";
// http://appium.io/slate/en/master/?java#appium-server-capabilities
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("automationName", "Appium");
capabilities.setCapability("platformName", "Android");
capabilities.setCapability("platformVersion", androidVersion);
capabilities.setCapability("deviceName", mobileDeviceName);
capabilities.setCapability("app", "chrome");
capabilities.setCapability("browserName", "chrome");
capabilities.setCapability("newCommandTimeout", "0");
// ANDROID ONLY
/*capabilities.setCapability("appActivity", "com.android");
capabilities.setCapability("appPackage", ".ApiumMain");
*/
// Appium servers are nothing but the Node.js server
AppiumDriverLocalService service = AppiumDriverLocalService.buildService(
new AppiumServiceBuilder()
.usingDriverExecutable(new File(nodeJSExecutable))
.withAppiumJS(new File(appiumJS))
);
service.start();
System.out.println("Device : " + mobileDeviceName);
try {
String url = String.format("http://%s:%d/wd/hub", hsotMachineIP, seleniumProt);
System.out.println(" Server Address : " + url);
driver = new RemoteWebDriver(new URL(url), capabilities);
driver.get(appURL);
browserActions(driver, appURL);
}catch (MalformedURLException e) {
e.printStackTrace();
} finally {
driver.quit();
service.stop();
}
}
private void browserActions(RemoteWebDriver driver, String appURL) {
try {
WebElement ele = driver.findElementByXPath("//body/div[4]/div[1]/div[1]/a[1]");
ele.click();
WebElement ele2 = driver.findElementByXPath("//*[@id='topnav']/div[1]/div[1]/a[2]");
ele2.click();
System.in.read();
System.in.read();
} catch (ElementNotVisibleException logMsg){
} catch (IOException e) {
}
}
}
Appium setup
Windows用: インストール済みのAndroid SDK
、Appium [Server
& java-client
]、IDEとSelenium-サーバ - standalone
をEclipseにADT pugin
を追加セットの環境変数:
AVA_HOME~C:\Program Files (x86)\Java\jdk1.8.0_66
ANDROID_HOME~D:\Android\sdk
Path~D:\Android\sdk;D:\Android\sdk\platform-tools - ADB Debugger