Appium UI 自动化- appium 初分享

JHY · 2022年09月14日 · 最后由 JHY 回复于 2023年03月21日 · 5928 次阅读


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

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 2 条回复 时间 点赞

Appium 会话被某种原因断开连接、还能再次连接原来的会话 继续执行后续的操作吗?

JHY #1 · 2023年03月21日 Author
Goya 回复

看你脚本容错和重连机制,如果说你当前页面还在你脚本执行的进度是可以的,但如果被外部因素终止了 需要从头开始跑脚本 那可能就不行

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册