appium运行原理:
安卓原理:
1、Appium启动的时候,会创建一个http\\127.0.0.1:4723\wd\hub服务端(中转站)
2、4723端口接收client(也就是测试脚本)发来的请求,解析对应的请求
a. 执行脚本时,client-java将脚本翻译为webdriver 协议,与appium server通过json 进行交互;
b. appium server 通过webdriver协议发送请求给bootstrap.jar包调用UI Automator命令实现操作
c. bootstrap 把执行结果转发回appium server,appium server再把结果返回给client
ios原理:
a. 执行脚本时,client-java将脚本翻译为webdriver 协议,与appium server通过json 进行交互;
b. appium server 通过webdriver协议并将翻译为 Instruments命令,通过UIAutomation执行
c.Instruments再把执行结果转发回appium server
appium环境安装:
运行appium需要的环境:appium + node
java环境: jdk + sdk
Appium:
- appium desktop : 直接下载会在桌面有图标,点击就可以打开
- appium server : CMD- appium 打开 服务
JDK: cmd -- java -version(查看java版本号)
- 系统变量→新建 JAVA_HOME 变量 ,变量值填写jdk的安装目录
- 系统变量→寻找 Path 变量→编辑,在变量值最后输入 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
- 系统变量→新建 CLASSPATH 变量
变量值填写 .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意最前面有一点)
App元素定位: uiautomatorviewer(SDK自带)
- 目录一般在SDK目录下的Tools下
Node:cmd -- node -v(查看node 版本号)
- 部署Node:环境部署在PATH下或者新增一个Node _path下,新增一个目录 目录内容就是Node下的目录
Appium:cmd -- appium -v(查看appium 版本号)
- 部署Appium:找到Appium下的bin文件夹,点击进去后复制目录在 环境部署PATH下新增一个
appium简单语法:
Appium 连接手机:
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("deviceName", "meizu-m2-88UFBMH25DV4");//(手机型号)
//capabilities.setCapability("deviceName", "huawei-sla_al00-3UQBB17715512295");
capabilities.setCapability("automationName", "Appium");
capabilities.setCapability("platformName", "Android");
capabilities.setCapability("platformVersion", "5.1"); //(系统型号)
// capabilities.setCapability("platformVersion", "7.0");
capabilities.setCapability("unicodeKeyboard", "True"); // 可以输入中文 需要放在app之前
capabilities.setCapability("resetKeyboard", "True"); //可以输入中文
capabilities.setCapability("appPackage", "com.***.****");//(app包名)
capabilities.setCapability("appActivity", ".ui.splash.*****");//(包内的主activity)
AppiumDriver driver =new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
获取App页面的所有元素:
String a=driver.getPageSource();
定位App页面元素(使用uiautomatorviewer 定位元素):
定位一个元素:
driver.findElementByName();//根据text
driver.findElementById();//根据 ID 定位
Thread.sleep(20);// 点击完成后,休眠20秒
driver.findElementByName().senKeys("可以输入任何字");// Text定位到之后可以直接使用输入字符
driver.getPageSource() //获取App当前界面所有的元素
driver.getPageSource().lastIndexOf()//搜索当前页面所有元素 想要的元素
TouchAction a=new TouchAction(driver);
a.tap(300,300).release().perform(); //点击屏幕 300*300的地方
driver.quit();//关闭driver,如果不关闭 下次启动会报错
定位一组元素
driver.findElementsById("com.zy.mcc:id/scene_name_text");