appium-desktop的作用:方便調試和查找頁面元素
1、首先啟動mumu模擬器,然后使用adb 連接到模擬器
2、啟動appium-desktop,先看看需要設置些什么東西
(1)simple界面
Host:Android設備的ip,若使用模擬器,使用默認的 0.0.0.0即可
Port:端口使用默認的4723即可
如果是真機,Host 和 Port 不用填
Edit Configurations:設置 ANDRODI_HOME 和 JAVA_HOME,如果已經配置了這兩個環境變量,這appium會自動讀取,建議先提前配置兩個環境變量
(2)Advanced界面
Logfile Path:設置appium的log路徑
Log Level:設置log的等級,默認debug即可
Local Timezone:時區設置,可看情況勾選
Log Timestamps:日志顯示時間戳
Supress Log Color:設置日志顏色,方便讀
設置好了后即可連接Android設備,start server(啟動服務),start inspector session(打開調試界面)
3、設置 desired capabilities
常用的設置如下
{
"platformName": "Android", //設備類型 Android 或 ios
"platformVersion": "6.0.1", // Android 或 ios 版本
"deviceName": "127.0.0.1:7555", //設備名稱,模擬器即為 ip,手機可使用 adb連接時的設備名稱,使用 adb devices可查看
"appPackage": "com.baidu.tieba", //appPackage,下面會介紹獲取方法
"appActivity": ".tblauncher.MainTabActivity", //appActivity,下面會介紹獲取方法
"noReset": true, //不清除緩存
//unicodeKeyboard 和 resetKeyboard 設置Unicode鍵盤,讓腳本能夠輸入中文,成對使用,單獨使用會被ignore
"unicodeKeyboard":true,
"resetKeyboard":true
}
連接設備必須的屬性 :platformName,platformVersion,deviceName,appPackage,appActivity
獲取 appPackage 和 appActivity 的方法:首先啟動對應的App,然后輸入命令 adb shell dumpsys activity |findStr "mFoc"

前面的即為 appPackage ,后面的為 appActivity ,注意千萬別把 . 漏掉了
4、啟動 APP
(1)啟動APP失敗
1.出現下圖的錯誤時,不要使用 Automatic Server,使用 Custom Server 啟動

2.有可能會有模擬器的adb和Android studio的adb版本不同而導致鏈接不上的情況,保證mumu模擬器ADB版本號與SDK的abd版本一致,將SDK的abd復制到mumu模擬器路徑下並修改文件名,替換原有文件
(2)啟動后的界面可以 查找元素,按坐標滑動,按坐標點擊,錄制腳本 等功能,錄制腳本時會自動生成 代碼腳本,可選擇 Java,Python等,寫腳本時可以用來參考
5、元素定位
1. app的xml結構中的 attribute中的 content-desc 對應於元素定位時用到 accessibility id,定位使用 driver.findElement(MobileBy.AccessibilityId("請輸入QQ號碼或手機或郵箱"))
2. app的xml結構中的 attribute中的 resource-id 對應於元素定位時用到的 id,定位使用 driver.findElement(By.id("com.tencent.mobileqq:id/login"))
3. 依然可以使用xpath 的屬性定位,寫法和selenium的xpath的屬性定位相同
6、Java代碼
需要先拉去jar 包:selenium,Java-client
注意,使用 代碼啟動APP時,啟動appium-desktop的服務即可(start server),不要打開調試界面(start inspector session),防止沖突
//使用appium-desktop啟動APP @Test public void appConnect() throws InterruptedException, MalformedURLException { //配置Capabilities參數 DesiredCapabilities desiredCapabilities = new DesiredCapabilities(); //設置必須的參數 desiredCapabilities.setCapability("deviceName", "127.0.0.1:7555"); desiredCapabilities.setCapability("platformName", "Android"); desiredCapabilities.setCapability("platformVersion", "6.0.1"); desiredCapabilities.setCapability("appPackage", "com.tencent.mobileqq"); desiredCapabilities.setCapability("appActivity", ".activity.LoginActivity"); //以下為可選參數 //不要重置簽名 desiredCapabilities.setCapability("noSign", true); //不清除緩存 desiredCapabilities.setCapability("noReset", true); //設置使用unicode鍵盤,讓自動化腳本實現過程中能夠輸入中文,成對使用,單獨使用下面的某一個屬性會ignore desiredCapabilities.setCapability("unicodeKeyboard", true); desiredCapabilities.setCapability("resetKeyboard", true); //電腦連接了多個設備時,需要指定設備 //desiredCapabilities.setCapability("udid","127.0.0.1:7555"); //創建driver對象,URL參數是固定寫法,可參考appium-desktop的custom server的Remote Host,Remote Por,Remote Path AndroidDriver driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), desiredCapabilities); //啟動APP需要一定的時間,注意設置等待時間 Thread.sleep(3000); //使用上面提到過的三種元素定位方式 driver.findElement(MobileBy.AccessibilityId("請輸入QQ號碼或手機或郵箱")).sendKeys("123456"); driver.findElement(By.xpath("//android.widget.EditText[@content-desc='密碼 安全']")).sendKeys("12456"); driver.findElement(By.id("com.tencent.mobileqq:id/login")).click(); Thread.sleep(10000); //關閉APP和driver driver.closeApp(); driver.quit(); }
