博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
appium(13)- server config
阅读量:4957 次
发布时间:2019-06-12

本文共 9289 字,大约阅读时间需要 30 分钟。

//本文讲解:启动server时,如何配置capabilities 和 flag。可以将不同client端需要的通用的capabilities都放到server端配置。

Requirements

  • Installed Node.js 0.12 or greater.

  • At least an appium server instance installed via npm.

The basic principle.

It works the similar way as common ,  of Selenium project or . They use subclasses of the .

Which capabilities this feature provides

This feature providese abilities and options of the starting of a local Appium node server. End users still able to open apps as usual

DesiredCapabilities capabilities = new DesiredCapabilities();    capabilities.setCapability(MobileCapabilityType.BROWSER_NAME, ""); capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator"); capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath()); capabilities.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, 120); driver = new AndroidDriver<>(new URL("remoteOrLocalAddress"), capabilities);

when the server is launched locally\remotely. Also user is free to launch a local Appium node server and open their app for the further testing the following way:

DesiredCapabilities capabilities = new DesiredCapabilities();    capabilities.setCapability(MobileCapabilityType.BROWSER_NAME, ""); capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator"); capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath()); capabilities.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, 120); driver = new AndroidDriver<>(capabilities);

How to prepare the local service before the starting

If there is no specific parameters then

import io.appium.java_client.service.local.AppiumDriverLocalService;    ...    AppiumDriverLocalService service = AppiumDriverLocalService.buildDefaultService(); service.start(); ... service.stop();

FYI

There are possible problems related to local environment which could break this:

AppiumDriverLocalService service = AppiumDriverLocalService.buildDefaultService();

It is more usual for UNIX/LINUX-like OS's. Also there are situations when should be used an another Node.JS instance, e.g. the instance which is installed in the directory that differs from one defined at the PATH environmental variable. The same may be true for Appium node server (it is related to appium.js file (v <= 1.4.16) and main.js (v >= 1.5.0)).

At this case user is able to set up values of the NODE_BINARY_PATH (The environmental variable used to define the path to executable NodeJS file (node.exe for WIN and node for Linux/MacOS X)) and the APPIUM_BINARY_PATH (The environmental variable used to define the path to executable appium.js (1.4.x and lower) or main.js (1.5.x and higher)) environmental variables/system properties. Also it is possible to define these values programmatically:

//appium.node.js.exec.pathSystem.setProperty(AppiumServiceBuilder.NODE_PATH , "the path to the desired node.js executable"); System.setProperty(AppiumServiceBuilder.APPIUM_PATH , "the path to the desired appium.js or main.js"); AppiumDriverLocalService service = AppiumDriverLocalService.buildDefaultService();

If there should be non default parameters specified then

import io.appium.java_client.service.local.AppiumDriverLocalService;import io.appium.java_client.service.local.AppiumServiceBuilder;import io.appium.java_client.service.local.flags.GeneralServerFlag; ... AppiumDriverLocalService service = AppiumDriverLocalService. buildService(new AppiumServiceBuilder(). withArgument(GeneralServerFlag.TEMP_DIRECTORY, "The_path_to_the_temporary_directory"));

or

import io.appium.java_client.service.local.AppiumDriverLocalService;import io.appium.java_client.service.local.AppiumServiceBuilder;import io.appium.java_client.service.local.flags.GeneralServerFlag; ... AppiumDriverLocalService service = new AppiumServiceBuilder(). withArgument(GeneralServerFlag.TEMP_DIRECTORY, "The_path_to_the_temporary_directory").build();

Lists of available server side flags are here:

  • io.appium.java_client.service.local.flags.GeneralServerFlag;
  • io.appium.java_client.service.local.flags.AndroidServerFlag;
  • io.appium.java_client.service.local.flags.IOSServerFlag

Which parameters also can be defined

  • If it is necessary to define some specific port or any free port
new AppiumServiceBuilder().usingPort(4000);

or

new AppiumServiceBuilder().usingAnyFreePort();
  • If it is necessary to use another IP address
new AppiumServiceBuilder().withIPAddress("127.0.0.1");
  • If it is necessary to define output log file
import java.io.File;   ...new AppiumServiceBuilder().withLogFile(logFile);
  • If it is necessary to define another Node.js executable file
import java.io.File;...new AppiumServiceBuilder().usingDriverExecutable(nodeJSExecutable);
  • If it is necessary to define another appium.js/main.js file
import java.io.File;...//appiumJS is the full or relative path to //the appium.js (v<=1.4.16) or maim.js (v>=1.5.0)new AppiumServiceBuilder().withAppiumJS(new File(appiumJS));
  • It is possible to define server capabilities (node server v >= 1.5.0)
DesiredCapabilities serverCapabilities = new DesiredCapabilities();...//the capability filling AppiumServiceBuilder builder = new AppiumServiceBuilder(). withCapabilities(serverCapabilities); AppiumDriverLocalService service = builder.build(); service.start(); ... service.stop();

Capabilities which are used by a builder can be completed/orerriden any similar way://server端与client端配合,配置capability的例子

DesiredCapabilities serverCapabilities = new DesiredCapabilities();serverCapabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android"); serverCapabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator"); serverCapabilities.setCapability(MobileCapabilityType.FULL_RESET, true); serverCapabilities.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, 60); serverCapabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath()); serverCapabilities.setCapability(AndroidMobileCapabilityType.CHROMEDRIVER_EXECUTABLE, chrome.getAbsolutePath()); //this capability set can be used for all cases AppiumServiceBuilder builder = new AppiumServiceBuilder(). withCapabilities(serverCapabilities); AppiumDriverLocalService service = builder.build(); DesiredCapabilities clientCapabilities = new DesiredCapabilities(); clientCapabilities.setCapability(AndroidMobileCapabilityType.APP_PACKAGE, "io.appium.android.apis"); clientCapabilities.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY, ".view.WebView1");

then

AndroidDriver
driver = new AndroidDriver<>(service, clientCapabilities);

or

AndroidDriver
driver = new AndroidDriver<>(builder, clientCapabilities);

or

service.start();AndroidDriver
driver = new AndroidDriver<>(service.getUrl(), clientCapabilities);

How to create an AppiumDriver instance

Many constructors of / use  or  as parameters. The list of constructors is below.

public AndroidDriver(URL remoteAddress,            org.openqa.selenium.Capabilities desiredCapabilities)public AndroidDriver(URL remoteAddress, org.openqa.selenium.remote.http.HttpClient.Factory httpClientFactory, org.openqa.selenium.Capabilities desiredCapabilities) public AndroidDriver(AppiumDriverLocalService service, org.openqa.selenium.Capabilities desiredCapabilities) public AndroidDriver(AppiumDriverLocalService service, org.openqa.selenium.remote.http.HttpClient.Factory httpClientFactory, org.openqa.selenium.Capabilities desiredCapabilities) public AndroidDriver(AppiumServiceBuilder builder, org.openqa.selenium.Capabilities desiredCapabilities) public AndroidDriver(AppiumServiceBuilder builder, org.openqa.selenium.remote.http.HttpClient.Factory httpClientFactory, org.openqa.selenium.Capabilities desiredCapabilities) public AndroidDriver(org.openqa.selenium.remote.http.HttpClient.Factory httpClientFactory, org.openqa.selenium.Capabilities desiredCapabilities) public AndroidDriver(org.openqa.selenium.Capabilities desiredCapabilities)
public IOSDriver(URL remoteAddress,            org.openqa.selenium.Capabilities desiredCapabilities)public IOSDriver(URL remoteAddress, org.openqa.selenium.remote.http.HttpClient.Factory httpClientFactory, org.openqa.selenium.Capabilities desiredCapabilities) public IOSDriver(AppiumDriverLocalService service, org.openqa.selenium.Capabilities desiredCapabilities) public IOSDriver(AppiumDriverLocalService service, org.openqa.selenium.remote.http.HttpClient.Factory httpClientFactory, org.openqa.selenium.Capabilities desiredCapabilities) public IOSDriver(AppiumServiceBuilder builder, org.openqa.selenium.Capabilities desiredCapabilities) public IOSDriver(AppiumServiceBuilder builder, org.openqa.selenium.remote.http.HttpClient.Factory httpClientFactory, org.openqa.selenium.Capabilities desiredCapabilities) public IOSDriver(org.openqa.selenium.remote.http.HttpClient.Factory httpClientFactory, org.openqa.selenium.Capabilities desiredCapabilities) public IOSDriver(org.openqa.selenium.Capabilities desiredCapabilities)

An instance of AppiumDriverLocalService which has passed through constructors will be stopped when

driver.quit();

If it is necessary to keep the service alive during a long time then something like that is available

service.start();  ....  new IOSDriver
(service.getUrl(), capabilities)

转载于:https://www.cnblogs.com/superbaby11/p/6102395.html

你可能感兴趣的文章
通过继承Thread类的方式创建线程
查看>>
模拟多人爬山
查看>>
测试3---将字符串压缩算法
查看>>
测试4--创建文件夹,在文件夹里创建文件并复制
查看>>
模拟叫号看病
查看>>
替换文本文件内容
查看>>
测试5--模拟一个在控制台不断按时分秒打印的电子表
查看>>
什么是Java序列化、为什么要序列化、JAVA序列化有哪些方式(性能由低至高)...
查看>>
什么是索引?Mysql目前主要的几种索引类型
查看>>
测试1---输入一串字符,并和谐掉
查看>>
SQL语句中----删除表数据drop、truncate和delete的用法
查看>>
测试2---输出字符串里的数字
查看>>
分层开发的优点与缺点
查看>>
测试6--模拟两人在对话1000次
查看>>
数据库事务的四大特性
查看>>
MySQL练习题
查看>>
Failure to find com.oracle:ojdbc6:jar
查看>>
记录下 mybatis.generator 插件自动生成mapper+entity+mapper.xml 少走点坑
查看>>
第二周总结
查看>>
实验报告二
查看>>