一、下载jdk并配置好环境
二、下载Android-sdk并配置好环境
三、下载Eclipse软件
四、下载Node.js
下载地址:https://nodejs.org/en/download/,或者云盘上下载:node-v12.16.3-x64.msi
傻瓜式安装即可,如果改变的安装路径,需要要配置npm参数,把命令当中的路径换成实际路径,打开cmd,操作如下:
npm config set prefix=“D:\Program Files\nodejs\node_global”
npm config set cache=“D:\Program Files\nodejs\node_cache”
npm config set init-module=“D:\Program Files\.npm-init.js”
npm config set registry=“https://registry.npm.taobao.org/”
npm config set tmp=“D:\Program Files\Temp”
npm config set userconfig=“D:\Program Files\.npmrc”
安装完成后进行验证,cmd:node -v
五、Appuim下载
Appium 目前托管在github,正确的Appuim下载地址:https://github.com/appium/appium-desktop/releases/tag/v1.12.1,或者云盘上下载
*安装完成后,需要配置路径,将node_modules.bin目录放到系统path环境下,即将路径D:\Program Files (x86)\Appium\node_modules.bin添加到环境变量path中去。 *(视情况而定,本次实验未做此操作)
cmd下执行命令npm install -g appium-doctor (视情况而定,此实验未做此操作)
六、Appium操作
1、启动程序,点击下方按钮启动软件
2、显示启动成功,点击红圈启动检查器会话
3、启动adb,检查是否有设备接入
4、查看appium启动的页面,并在右下角编辑输入需要的信息,保存,左上角选中自动启动服务。页面效果如下:
其中需要填入的信息如下:
“platformName”: “Android”, #系统
"platformVersion ": “10”, #系统版本
“deviceName”: “xx”, #手机名称
“appPackage”: “xx.xx.xxxt”, #软件安装包Package
“appActivity”: “xx.xx.xxxxxxxx”#软件安装包Activity
“App”: “D:\xx.apk” #手机安装包路径,如果手机有安装,可以不添加
5、点击右下角启动session,此时手机端要保证可以安装程序Appium Setting,
6、启动后页面效果如下,其中最上方红圈为录制操作,红圈最左侧的向右的箭头是滑动操作,右侧的红圈为点击发送事件操作:
7、启动录制后,点击右上角展示详细代码:
七:Eclipse+java操作
1、启动Eclipse软件,并创建java project项目,创建JUnit Test Case,选择junit 4,并在完成的时候导入所有的junit 4 的包
2、编写代码前导入三个jar包,云盘上有,也可http://selenium-release.storage.googleapis.com/index.html这里下载
3、可以自己编写代码,可以复制录制操作的代码,如下:
import static org.junit.Assert.*;
import org.junit.Test;
import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidDriver;
import junit.framework.TestCase;
import org.junit.After;
import org.junit.Before;
import java.net.MalformedURLException;
import java.net.URL;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.Sleeper;
public class appium {
private AndroidDriver driver;
@Before
public void setUp() throws MalformedURLException {
DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
desiredCapabilities.setCapability("platformName", "Android");
desiredCapabilities.setCapability("platformVersion", "10");
desiredCapabilities.setCapability("deviceName", "XXXXXXXXXXXXX");
desiredCapabilities.setCapability("appPackage", "com.android.deskclock");
desiredCapabilities.setCapability("appActivity", "com.android.deskclock.AlarmsMainActivity");
URL remoteUrl = new URL("http://localhost:4723/wd/hub");
driver = new AndroidDriver(remoteUrl, desiredCapabilities);
System.out.println("程序启动");
}
@Test
public void sampleTest() throws InterruptedException {
MobileElement el1 = (MobileElement) driver.findElementByXPath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.RelativeLayout[2]/android.widget.RelativeLayout[1]/android.widget.ListView/android.widget.FrameLayout[1]/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.Switch");
el1.click();
Thread.sleep(1000);
MobileElement el2 = (MobileElement) driver.findElementByXPath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.RelativeLayout[2]/android.widget.RelativeLayout[1]/android.widget.ListView/android.widget.FrameLayout[2]/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.Switch");
el2.click();
Thread.sleep(1000);
System.out.println("程序执行完成");
}
@After
public void tearDown() {
driver.quit();
System.out.println("已退出程序");
}
}
4、如手机端未安装apk,可在项目中创建app存放的文件夹,aa,并在@before中加入代码:
// 获取当前程序的路径
File classpathRoot = new File(System.getProperty("user.dir"));
// 获取apps文件
File appDir = new File(classpathRoot, "app存放的文件夹名称");
// 获取apk文件
File app = new File(appDir, "xx.apk");//apk名称
5、启动程序中可加入捕获异常操作:
try {
driver = new AndroidDriver<>(new URL("http://localhost:4723/wd/hub"), desiredCapabilities);
} catch (MalformedURLException e) {
e.printStackTrace();
}
6、可参照类似于selenium的api进行元素获取并操作:
WebElement xx = driver.findElement(By.id("xx"));
xx.click();
7、每次运行不安装app
capabilities.setCapability("noReset", "true");
capabilities.setCapability("fullReset", "false");
每次运行不安装app,Python代码类似
caps["noReset"]="true";
caps["fullReset"]="false";
8、允许中文输入
capabilities.setCapability("unicodeKeyboard", "true");
capabilities.setCapability("resetKeyboard", "true");
9、若真机app启动失败,可以考虑是否是安装包加固引起的,可采用方法是不让appium对apk进行重签名
capabilities.setCapability("noSign","true")
python类似:
caps["noSign"]="true";