Về cơ bản việc automated testing trên MacOS cho iOS devices cũng tương tự như trên Windows cho Android devices. Tuy nhiên, sẽ có đôi chút khác biệt, bạn sẽ phải làm việc nhiều hơn với command line cũng như trong thực tế sẽ có những trục trặc bất ngờ chưa biết trước được:
************************
CÀI ĐẶT MÔI TRƯỜNG
*Phần mềm:
▸Homebrew
▸Carthage
▸Node & NPM
▸JDK
▸XCode 10.1
▸authorize-ios
▸ios-deploy
▸ideviceinstaller
▸ios_webkit_debug_proxy
▸Appium
▸Appium Doctor
▸Maven
▸Eclipse
▸TestNG
*Phần cứng:
▸PC: Macbook/Mac mini...
▸iOS devices: iPhone/iPad.
*Ngôn ngữ lập trình: Java.
Homebrew (https://brew.sh/)
Là một chương trình giúp tải hầu hết các phần mềm trong danh sách một cách dễ dàng và thuận tiện. Để cài đặt Homebrew, hãy mở Terminal và chạy dòng lệnh sau:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Carthage
Dùng để quản lý dependency, được yêu cầu bởi WebDriverAgent. Để cài đặt, mở Terminal, chạy lệnh sau:
brew install carthage
Để cập nhật lên version mới nhất, sử dụng lệnh:
brew upgrade carthage
Node & NPM
Node là một môi trường chạy javascript và npm là node package manager. Chúng ta cần cài Node & bởi vì Appium là một ứng dụng node.
brew install node
Để cập nhật lên version mới nhất, sử dụng lệnh:
brew upgrade node
JDK và cài đặt JAVA_HOME
Tải và cài đặt jdk-8u181-macosx-x64.dmg từ link này http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html.
Tiếp theo, bạn sẽ cần cài đặt JAVA_HOME trong .bash_profile. Trước tiên bạn sẽ cần xem JDK được cài vào chỗ nào. Hãy mở Terminal lên và chạy dòng lệnh sau:
/usr/libexec/java_home --v
Và bạn sẽ nhận được kết quả tương tự như sau:
/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home
Bây giờ, chúng ta sẽ edit bash_profile bằng vim editor. Chạy tiếp dòng lệnh sau trong Terminal:
vim ~/.bash_profile
Nhấn phím "i" để vào insert mode, sau đó di chuyển con trỏ tới một dòng mới và thêm vào 2 dòng sau:
export JAVA_HOME=[path of your java home]
export PATH=$JAVA_HOME/bin:$PATH
Nhấn "esc" và gõ ":wq" và nhấn enter để lưu và thoát vim. Tắt Terminal và mở lại để cập nhật cấu hình cho .bash_profile
Cài đặt Xcode và Simulators
Bạn có thể download Xcode trực tiếp từ Appstore (phải có Apple ID) hoặc sử dụng trực tiếp file .xip sau. Xả nén được file Xcode.app sau đó kéo thả vào Applications trong Finder.
(md5: c12844f672cf26024419f96462291d29)
Cài đặt authorize-ios
authorize-ios là một ứng dụng nhỏ cho phép pre-authorizes instruments để chạy các script UIAutomation cho các thiết bị iOS. Và bạn sẽ cần nó để chạy với các thiết bị thật.
Mở Terminal và chạy lệnh sau:
npm install -g authorize-ios
Cài đặt ios-deploy
ios-deploy là một ứng dụng nhỏ để cài đặt và debug ứng dụng cho iPhone từ dòng lệnh mà không cần tới Xcode.
Mở Terminal và chạy lệnh sau:
brew install ios-deploy
Cài đặt ideviceinstaller
ideviceinstaller là một công cụ giúp tương tác với installation_proxy của một thiết bị iOS giúp cài đặt, nâng cấp, gỡ bỏ, lưu trữ, phục hồi ứng dùng. Bạn sẽ cần ideviceinstaller để chạy test trên thiết bị thật.
Mở Terminal và chạy lệnh sau:
brew install ideviceinstaller
**Nếu đang sử dụng MacOS High Sierra hoặc Mojave, bạn có thể sẽ gặp lỗi "invalid active developer path". Trong trường hợp đó, hãy chạy các lệnh sau trong Terminal:
xcode-select --install
sudo xcode-select -r
Cài đặt ios_webkit_debug_proxy
Appium sử dụng công cụ này để truy cập vào các web view trên thiết bị iOS thật.
Mở Terminal và chạy lệnh sau để cài đặt:
brew install ios-webkit-debug-proxy
Cài đặt Appium
Appium là một automation framework mã nguồn mở cho các ứng dụng mobile trên 3 platform là Android, iOS và Windows sử dụng giao thức WebDriver.
Mở Terminal và chạy lệnh sau để cài đặt:
npm install -g appium
Để khởi chạy Appium (bắt buộc trước khi execute test scripts cho mobile platforms), cũng trong Terminal, chạy lệnh sau:
appium
npm uninstall -g appium
Hoặc đơn giản hơn, bạn có thể tải và cài đặt Appium phiên bản có UI, không cần phải sử dụng command line.
Cài đặt Appium Doctor
Là một công cụ nhỏ giúp kiểm tra qua một checklist xem chúng ta đã có đủ các điều kiện môi trường cần thiết để chạy Appium được hay chưa:
Mở Terminal và chạy lệnh sau để cài Appium Doctor:
npm install -g appium-doctor
Mở Terminal và chạy lệnh sau để chạy Appium Doctor:
appium-doctor
Đối với automation cho iOS devices, không cần quan tâm tới ANDROID_HOME, adb, android, emulator v.v...
Cài đặt Maven
Maven là một công cụ giúp build và quản lý Java projects. Với Maven, chúng ta sẽ không cần phải nhọc công tìm kiếm và tải về từng library một nữa, chỉ cần cấu hình trong file pom.xml là xong.
Trong Terminal, chạy lệnh sau để cài Maven:
brew install maven
Sau đó, chạy lệnh sau để kiểm tra xem Maven đã được cài đặt thành công hay chưa:
mvn -version
Cuối cùng, cài đặt biến môi trường cho Maven (tương tự với JAVA_HOME ở trên)
export PATH=/usr/local/Cellar/maven/3.5.4/bin:$PATH
Thông tin của Maven được output từ Terminal
Cài đặt Eclipse
Eclipse là một IDE (Integrated Development Environment) mà chúng ta sẽ dùng để viết script, complie và chạy test script.
Tải và cài đặt Eclipse IDE for Java EE Developers tại địa chỉ: https://www.eclipse.org/downloads/packages/
************************
DỰNG PROJECT ĐƠN GIẢN VÀ CHẠY THỬ SCRIPT
Trong Eclipse, tạo một Maven project và cấu hình file pom.xml như sau:
<dependencies>
<dependency>
<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>5.0.4</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.9.1</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.7</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.14.3</version>
<scope>test</scope>
</dependency>
</dependencies>
Nếu không thích dùng TestNG, có thể bỏ dependency của TestNG ra và thay bằng dependency của JUnit hoặc một test tool nào đó mà bạn muốn.
Trong project vừa tạo, tạo mới một class AppTest với nội dung tương tự như sau, hoặc có thể dùng hàm main để execute cũng được:
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import io.appium.java_client.MobileElement;
import io.appium.java_client.TouchAction;
import io.appium.java_client.ios.IOSDriver;
import io.appium.java_client.ios.IOSElement;
import io.appium.java_client.remote.MobileCapabilityType;
public class AppTest {
public static URL url;
public static DesiredCapabilities capabilities;
public static IOSDriver driver;
//1
@BeforeSuite
public void setupAppium() throws MalformedURLException {
//2
final String URL_STRING = "http://0.0.0.0:4723/wd/hub";
url = new URL(URL_STRING);
//3
capabilities = new DesiredCapabilities();
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "iPhone");
capabilities.setCapability(MobileCapabilityType.UDID, "5e2ce********************16f10");
capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "iOS");
capabilities.setCapability("xcodeOrgId", "[YOUR_TEAM_ID]");
capabilities.setCapability("xcodeSigningId", "iPhone Developer");
capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "12.0.1");
capabilities.setCapability(MobileCapabilityType.APP, "/Users/******/Downloads/App.ipa");
capabilities.setCapability(MobileCapabilityType.NO_RESET, true);
capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, "XCUITest");
capabilities.setCapability("useNewWDA", true);
//4
driver = new IOSDriver(url, capabilities);
driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
driver.resetApp();
}
//5
@AfterSuite
public void uninstallApp() throws InterruptedException {
driver.removeApp("**********");
}
//6
@Test (enabled=true) public void myFirstTest() throws InterruptedException {
driver.resetApp();
}
Các thông tin UDID, deviceName, các bạn sẽ lấy bằng cách kết nối thiết bị iOS với máy Mac thông qua dây cáp. Sau đó mở iTunes, truy cập vào thiết bị để lấy các thông tin này. Với deviceName, có thể lấy trực tiếp trên iOS device bằng cách vào Settings > General > About
Nếu execute thành công (nhớ start Appium lên trước), các bạn sẽ thấy file App.ipa được cài lên thiết bị iOS và tự động được mở lên. Điều này chứng tỏ giữa thiết bị và máy Mac đã được "thông" với nhau. Tuy nhiên, nếu app vẫn cài được nhưng gặp lỗi "xcodebuild failed with code 65" thì bạn đang gặp rắc rối với security certificate của app (mình không rành về bên dev ios app nên có thể dùng từ không chính xác). Bạn sẽ cần phải bổ sung IDtrong capability thông tin cho field xCodeOrgId. Thông tin này được lấy bằng cách như sau:
In either case, the Team ID is a unique 10-character string generated by Apple that is assigned to your team. You can find your Team ID using your developer account. Sign in to developer.apple.com/account, and click Membership in the sidebar. Your Team ID appears in the Membership Information section under the team name. You can also find your team ID listed under the "Organizational Unit" field in your iPhone Developer certificate in your keychain.
Đọc thêm hướng dẫn ở đây để rõ hơn: https://github.com/appium/appium-xcuitest-driver/blob/master/docs/real-device-config.md
Nếu bạn không có quyền truy cập vào account Apple Dev dùng để commit app này lên Appstore, thì bạn sẽ cần phải liên hệ với Dev team để lấy được thông tin đó. Chúc các bạn thành công!!!
Original content by Benjamin ZY Tan