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");