接前面的例子
一:APP元素探測工具(Appium Inspector)
比如我錄製一個滑動,開啓錄製後,選中滑動按鈕選擇開始和結束點,就能錄製了,也能獲得相應的代碼
二:UIAutomatorViewer
是SDK提供的原生元素定位工具,不需要和上面那樣配置設備名啊這些(也就是不用提供啓動參數),而且效率更好
如果是SDK包的話在這目錄裏面:sdk\tools\bin
不過我用的是android studio,在sdk\tools就有
確認模擬器開啓,點這個按鈕就能獲得最新的畫面映射
可能會出現這種錯誤
Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncException: Remote object doesn't exist!
找了一些方法:記錄一下
(1)在cmd命令窗口中輸入 adb root(我發現我的好像已經打開了)
(2)重啓手機並且確認設備已經連接(也不行)
(3)重新打開uiautomatorviewer.bat(也不行)
(4)重新把手機拔了再插(沒有用,我的是模擬器)
(5)打開手機開發者權限,將USB調試按鈕重新啓動(我直接關了再開,然後可以顯示了)
但是我打開抖音試圖再來一波,發現不行了
(6)關了appium(我的已經關了)
(7)https://www.wandouip.com/t5i337805/(沒試驗)
後面我是發現像這種靜態的沒問題
但是這種動態的就不行了,哪怕我暫停了
好吧,可能是我理解還不夠深入,這個疑問先留着
還有一種情況我經常遇到,就是我寫完腳本運行,發現元素錯了,我想重新去定位,這時候刷新就出現上面那個問題,我的解決方法是關掉appium
這裏瞭解一下里面的內容
三:屬性瞭解
PackageName(包名)
應用的唯一身份標識,系統通過包名識別不同的應用,如兩個相同包名的應用在安裝時會提示覆蓋
ActivityName(類名)
Activity:android四大組件之一,簡單來說就是一個界面,和用戶進行交互, 如桌面(Launcher)
#獲得App入口的Activity
aapt dump badging <應用路徑> | findstr "launchable-activity"
#查看正在前臺運行的 activity
adb shell dumpsys activity | find "mFocusedActivity"
四:APP瞭解
(1)類型
Native App(原生app)
Hybrid App(混合app)
Web App(Web app)
(2)佈局
1.線性佈局(LinerLayout):線性佈局分爲水平線性和垂直線性
2.相對佈局(RelativeLayout):根據參照物的位置,來確定控件的位置
3.表格佈局(TableLayout):一種行列方式排列視圖的佈局
4.網格佈局(GridLayout):將界面劃分爲網格,界面元素可隨意擺放在網格中
5.絕對佈局(AbsoluteLayout):根據座標軸的方式來定位控件,原點(0,0)在左上角,往右X軸遞增,往下Y軸遞增
6.幀佈局(框架佈局)(FrameLayout):在它裏面的控件都是按後面的一個控件疊加在前一個控件上來顯示的
比如抖音,可以看到相應的佈局信息
(3)控件
特別多,可以參考:https://blog.csdn.net/mapeifan/article/details/50454002
這裏簡單列舉一下常見的
#文本類
TextView:顯示文本信息
EditText:編輯框,能輸入和編輯內容
#按鈕類
Button:按鈕控件
RadioButton:單選按鈕
RadioGroup:單選按鈕組,經常和RadioButton一起使用
ImageButton 圖片按鈕
CheckBox:複選按鈕
#圖片控件
ImageView:圖片控件
#進度條控件
ProgressBar:進度條
五:第一個app自動化腳本
可以使用maven工具,用來管理依賴包,如java-client.jar
下載maven,配置環境變量
在path裏面加上%MAVEN_HOME%\bin;就行了
配置一個包下載的本地文件夾(看到有些是\的,如果下載的包沒有在這裏面,那可能是路徑有問題,不過我這沒問題)
加個阿里的鏡像,下載的快一點
在eclipse把默認的路徑改一下
E:\idea2018\apache-maven-3.6.2-bin\apache-maven-3.6.2\conf\settings.xml(這個配置文件的名字不一定是這個,也可以修改的)
創建maven項目
文件-新建-項目-搜索maven-選中maven project
加依賴:https://mvnrepository.com/,選一個下載數多一點的,這樣穩定性可能比較好
package com.javaAuto;
import java.net.MalformedURLException;
import java.net.URL;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import io.appium.java_client.android.AndroidDriver;
public class JavaAutoTest {
// main
public static void main(String []agrs) throws Exception{
// 創建配置對象
DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
// 添加配置(設備、設備類型、包名、活動啓動入口)
desiredCapabilities.setCapability("deviceName", "127.0.0.1:62001");
desiredCapabilities.setCapability("platformName", "Android");
desiredCapabilities.setCapability("appPackage", "com.ss.android.ugc.aweme");
desiredCapabilities.setCapability("appActivity", "com.ss.android.ugc.aweme.splash.SplashActivity");
desiredCapabilities.setCapability("automationName", "UiAutomator1");
// 創建驅動(appium通信地址,配置對象)
AndroidDriver<WebElement> androidDriver = new AndroidDriver<WebElement>(
new URL("http://127.0.0.1:4723/wd/hub"),desiredCapabilities);
}
}
然後模擬器開啓,appium開啓,運行代碼,抖音被執行,ok!(這是不是測試版本的HelloWorld呀!!!)