appium ios 真機自動化環境搭建

近期因爲工做須要,本小菜在弄appium+ios+iphone真機的移動自動化,在網上找尋各類資料,發現針對IOS方面的資料少之又少,公司其它部門的弄過的同事也寥寥無幾,即便有,也是安卓方面的。本次書寫此文章,是爲了幫助依然在坑裏摸爬滾打的夥伴們,早日出坑。javascript

1、環境:java

macBook Pro:10.13.4node

iphone真機:iphone6 plus 11.3.1android

appium 1.8.1ios

xcode 9.3.1git

2、appium原理(轉自https://blog.csdn.net/achang21/article/details/60956618的介紹)github

Appium是一個開源、跨平臺的測試框架,能夠用來測試原生及混合的移動端應用。Appium支持IOS、Android及FirefoxOS平臺。Appium使用WebDriver的json wire協議,來驅動Apple系統的UIAutomation庫、Android系統的UIAutomator框架。Appium對IOS系統的支持得益於Dan Cuellar’s對於IOS自動化的研究。Appium也集成了Selendroid,來支持老android版本。web

Appium支持Selenium WebDriver支持的全部語言,如java、Object-C、JavaScript、Php、Python、Ruby、C#、Clojure,或者Perl語言,更可使用Selenium WebDriver的Api。Appium支持任何一種測試框架。若是隻使用Apple的UIAutomation,咱們只能用javascript來編寫測試用例,並且只能用Instruction來運行測試用例。一樣,若是隻使用Google的UIAutomation,咱們就只能用java來編寫測試用例。Appium實現了真正的跨平臺自動化測試。npm

appium選擇了client-server的設計模式。只要client可以發送http請求給server,那麼的話client用什麼語言來實現都是能夠的,這就是appium及webdriver如何作到支持多語言的;json

3、環境搭建步驟:

---------------------必要的庫安裝--------------------------------------

1.xcode安裝,app store裏安裝xcode

2.若是沒有安裝 過homebrew,請先安裝

/usr/bin/ruby -e "$(curl –fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

3.若是沒有安裝過npm及node.js,請先安裝

brew install npm,此命令執行後,npme和node.js會所有安裝完畢

4.安裝依賴庫

brew install libimobiledevice --HEAD

npm install -g ios-deploy  #若是是iOS10以上的系統才須要安裝

若是沒有安裝 libimobiledevice,會致使Appium沒法鏈接到iOS的設備,因此必需要安裝,若是要在iOS10+的系統上使用appium,則須要安裝ios-deploy

5.appium-doctor 安裝

npm install appium-doctor -g

安裝後執行appium-doctor --ios指令,能夠查看與iOS相關配置是否完整,下圖是所有配置都成功,若是有哪一項是打叉的,則進行安裝就能夠了。好比若是carthage項是打叉的,則須要安裝:

brew install carthage

 

---------------------webdriverAgent--------------------------------------

1.安裝webdriverAgent

(1)在github上下載最新webdriverAgent代碼

git clone https://github.com/facebook/WebDriverAgent

(2)下載依賴

cd /Users/yourname/WebDriverAgent

mkdir -p Resources/WebDriverAgent.bundle

sh ./Scripts/bootstrap.sh

該腳本會使用Carthage下載全部的依賴,使用npm打包響應的js文件。執行完成後,直接雙擊打開WebDriverAgent.xcodeproj這個文件。

2.配置WebDriverAgent

配置WebDriverAgentLib,選擇開發者帳號

 

配置WebDriverAgentRunner,選擇開發者帳號

 

3.鏈接並選擇本身的ios設備,運行

 

 

 

 

 

運行成功後,iphone手機上會新建一個無圖標的WebDriverAgent的應用,自動打開後立刻又返回桌面

 

而在xcode控制檯會打印以下日誌:裏面有IP地址與端口號

 

4.在網址上輸入http://(ip地址):(端口號)/status,若是網頁上返回一些json格式的數據,說明運行成功http://10.0.223.58:8100/status,有些iphone手機經過手機的IP和端口號還不能訪問,此時須要將手機的端口轉發到mac上

iproxy 8100 8100

執行命令後,經過訪問 http://localhost:8100/ status來驗證, 若是網頁上返回一些json格式的數據,說明運行成功

 

而若是是想查看UI的圖層,則可訪問http://localhost:8100/inspector,方便書寫測試用例

 

備註:一般來講爲了持續集成,自動化會比較好一些,咱們沒必要每次都經過這種方式來啓動xcode、WebDriverAgent,這種方式只在第1次搭建環境時運行便可,咱們能夠在自動化腳本中加入以下代碼,這樣只要在之後啓動appium後,運行自動化腳本,就會直接啓動WebDriverAgent

desiredCapabilities.setCapability("useNewWDA", true);

若是xcode在先啓動wda,而代碼中又用此行代碼,運行時xcode中會顯示執行失敗,報出衝突的錯誤哦,因此後期只在代碼中啓動WebDriverAgent便可,再也不須要用xcode啓動

---------------------appium--------------------------------------

appium安裝

我是使用源碼安裝的,在appium的版本選擇上,我不建議一味的追求最新版,由於最新的版本相配套的其它依賴有可能尚未同步更新,可能會報各類各樣的錯誤,並且最新版可能還不穩定,在這次搭建環境過程當中,我用最新版appium會發現appium的bug,經在github上與appium開發者反覆討論,修復bug,才能解決問題。因此在版本的選擇上,我建議使用穩定版本,而沒必要一味追求最新,小白鼠的角色並很差作,穩定纔是最好的~

npm install –g appium

啓動appium

appium --address 127.0.0.1 --port 4723

 

2.appium環境搭建的其它問題和調試方法:

(1)在appium執行過程當中,咱們能夠根據appium的日誌來查看哪一個環節有錯誤,如下是我在網上隨便找的一些日誌分析,https://blog.csdn.net/jffhy2017/article/details/69372064,能夠google找哦,網上關於日誌分析的內容不少。

若是在appium執行中哪一個環節出錯,咱們能夠將post的命令直接輸入在url中,看看返回的json串中的詳細錯誤信息,根據此錯誤信息排錯。

http://10.0.223.58:8100/(POST的命令)

 

(2)能夠在github上給appium的開發者留言,來解決問題。本身的英文+google翻譯,appium的開發者仍是很耐心的,並且解決問題一針見血,很是對症~

附上我一個問題:https://github.com/appium/appium/issues/10775

---------------------appium實踐實例-解鎖九宮格-----------------------------------

(附上動態效果圖:之後再加。。。)

代碼以下:

public class SampleTest1 {

    private IOSDriver driver;

    @Before

    public void setUp() throws MalformedURLException {

        DesiredCapabilities desiredCapabilities = new DesiredCapabilities();

        desiredCapabilities.setCapability("deviceName", "iphone 6 Plus");

        desiredCapabilities.setCapability("platformVersion", "11.3.1");

        desiredCapabilities.setCapability("platformName", "iOS");

        desiredCapabilities.setCapability("app", "/Users/yangyang50/Desktop/work/JDMEIphone_4.6.0.ipa");

        desiredCapabilities.setCapability("udid", "*****************");//請填寫手機的udid

        desiredCapabilities.setCapability("autoLaunch", false);

        desiredCapabilities.setCapability("useNewWDA", true);

        desiredCapabilities.setCapability("xcodeOrgId","******");//請填寫開發者賬號對應的OrgId

        desiredCapabilities.setCapability("xcodeSigningId","iPhone Developer");

        URL remoteUrl = new URL("http://localhost:4723/wd/hub");

        driver = new IOSDriver(remoteUrl, desiredCapabilities);

    }

 

    @Test

    public void sampleTest1() throws InterruptedException{

        MobileElement element_cancel = (MobileElement) driver.findElementByAccessibilityId("取消");

        element_cancel.click();

        Thread.sleep(2000);

        MobileElement element_1 = (MobileElement) driver.findElementByXPath("(//XCUIElementTypeButton[@name=\"lock botton unselected\"])[1]");

        MobileElement element_3 = (MobileElement) driver.findElementByXPath("(//XCUIElementTypeButton[@name=\"lock botton unselected\"])[3]");

        MobileElement element_6 = (MobileElement) driver.findElementByXPath("(//XCUIElementTypeButton[@name=\"lock botton unselected\"])[6]");

        TouchAction action = new TouchAction(driver);

        action.press(element_1).waitAction(500).moveTo(element_3).waitAction(500).moveTo(element_6).release().perform();

        Thread.sleep(1000);

    }

 

    @After

    public void tearDown() {

        driver.quit();

    }

}

相關文章
相關標籤/搜索