Trong bài viết trước bạn đã được giới thiệu về Appium là gì và Appium hoạt động như thế nào trong Android và iOS. Bài này sẽ giới thiệu đến bạn một ví dụ Appium kiểm thử tự động ứng dụng trên Android.
Các công nghệ sử dụng trong ví dụ này:
- Java 8 (JDK 1.8).
- Eclipse oxygen.
- Appium Server 1.10.0.
- Appium Client 3.2.0.
- TestNG 6.9.7.
Nội dung chính
Các bước thực hiện
- Cài đặt JDK
- Cài đặt Android Studio (SDK và máy ảo Android)
- Cài đặt Appium Server
- Xác định vị trí của các phần tử trong ứng dụng Android
- Tạo Appium Project với ngôn ngữ lập trình Java trên Eclipse
1. Cài đặt JDK
Bạn có thể tải JDK tại trang chủ của Oracle tại Download JDK, Oracle yêu cầu đăng nhập để tải JDK.
Hoặc nếu bạn ngại tạo tài khoản thì có thể tải từ google drive tại đây.
Sau khi cài đặt thành công thì bạn đừng quên cấu hình biến môi trường JAVA_HOME nhé. Bạn có thể thao khảo link cài đặt môi trường Java
2. Cài đặt Android Studio (SDK và máy ảo Android)
Mục đích của việc cài Android Studio của chúng ta là có được trình SDK, máy ảo Android(android emulator) và trình uiautomatorviewer (xác định đường dẫn các phần tử của ứng dụng android, sẽ được nhắc lại trong phần tạo Project ví dụ).
Link tải Android Studio tại Download Android Studio
Sau khi cài đặt xong bạn hãy cấu hình biến môi trường cho SDK nhé với tên ANDROID_HOME. Thông thường đường dẫn của SDK là C:\Users\[user]\AppData\Local\Android\Sdk, trong đó [user] là tên máy tính của bạn.
Đến đây bạn khởi động lại máy tính để JAVA_HOME và ANDROID_HOME có hiệu lực nhé.
3. Cài đặt Appium Server
Tại thời điểm viết bài này thì phiên bản của Appium 1.10.0. Nó có thể đáp ứng được phiên bản Android 9.0
Đây là trang chủ của Appium http://appium.io
Tải Appium 1.10.0 tại Download Appium tải bản appium-desktop-setup-1.10.0.exe cho Windows.
Sau khi cài xong, mở Appium Server 1.10.0 lên, nó có giao diện như sau:
Click "Edit Configurations" để kiểm tra cấu hình. Nếu nó nhận được JAVA_HOME và ANDROID_HOME như sau thì là OK. Nhưng nếu chưa nhận được thì xem lại bước 1 và 2. Hoặc bạn copy trược tiếp đường dẫn tương ứng của JDK và SDK vào là OK.
Click button "Start Server" để khởi động Appium Server.
4. Xác định vị trí của các phần tử trong ứng dụng Android
Appium cũng giống như Selenium, việc xác định vị trí các phần tử là phần cốt lõi của Appium. Như bạn đã biết giao diện Android có định dạng XML, như vậy có thể xác định vị trí dựa trên xpath; hoặc các thuộc tính của thẻ như id, name...
Ví dụ của chúng ta sẽ thực hiện test ứng dụng calculator.apk. Nên trước tiên bạn hãy tải và cài ứng dụng này vào thiết bị của bạn nhé. Link google drive download calculator.apk
Nếu bạn đang sử dụng thiết bị android thật thì hãy bật chế độ debugging của thiết bị.
Nếu không có thiết bị android, bạn cũng có thể tạo ra một android emulator.
Ở đây, mình sẽ sử dụng một android emulator:
Mình đã tạo sẵn một android emulator chạy android 9.0, mở nó lên bằng cách: mở Android Studio -> click biểu tượng "AVD Manager" như trong hình sau:
Start android emulator:
Giao diện của android emulator:
4.1. Cài ứng dụng calculator.apk vào android emulator
1. Copy file calculator.apk vào thư mục C:\Users\[user]\AppData\Local\Android\Sdk\platform-tools
2. Mở command line (cmd) và thực thi lệnh: cd C:\Users\[user]\AppData\Local\Android\Sdk\platform-tools
3. Cài ứng dụng vào android emulator bằng cách thực thi lệnh: adb install calculator.apk
4. Ứng dụng calculator.apk đã được cài thành công:
5. Mở dứng dụng calculator:
4.2. Xác định vị trí các phần tử của ứng dụng android
Chúng ta sẽ sử dụng trình uiautomatorviewer để xác định vị trí các phần tử trong ứng dụng android.
Hãy dảm bảo rằng ứng dụng calculator đang được mở trên thiết bị của bạn hoặc android emulator như trong phần 4.1
Mở uiautomatorviewer: trình uiautomatorviewer được cài đặt trong thư mục C:\Users\[user]\AppData\Local\Android\Sdk\tools\bin, các bước thực hiện:
- Mở command line (cmd)
- Thực thi lệnh: cd C:\Users\admin\AppData\Local\Android\Sdk\tools\bin
-
Thực thi lệnh: uiautomatorviewer.bat
-
Giao diện trình uiautomatorviewer:
-
Click 1 trong 2 button trong hình vuông có viền màu đỏ để hiển thị thông tin giao diện của ứng dụng calculator:
-
Ví dụ xác định vị trí của phần tử số 9 bằng cách click vào số 9, các thông tin chi tiết sẽ được hiển thị ở các vùng bên cạnh. Tại vùng "Node Detail" bạn sẽ xác định được các thông tin cần thiết để xác định vị trí.
resource-id = com.google.android.calculator:id/digit_9 sẽ được sử dụng để thao tác với phần tử số 9 trong phần sau:
Tương tự bạn có thể lấy được các phần tử khác. Nếu resource-id không tồn tại bạn vẫn có thể xác định phần tử đó bằng cách sử dụng XPath.
5. Tạo Appium Project với ngôn ngữ lập trình Java trên Eclipse
Hãy chắc chắn rằng Appium Server của bạn vẫn đang chạy nhé.
Các bước tạo Appium Project với ngôn ngữ lập trình Java trên Eclipse:
1. Cài TestNg plugin cho Eclipse
2. Tạo Maven Project có tên calculator-test, bạn có thể tham khảo bài tạo Maven project trong Eclipse.
Cấu trúc calculator-test project:
3. Thêm thư viện Appium client và TestNG vào project vừa tạo bằng cách thêm các dependency vào file pom.xml như sau:
<dependencies> <dependency> <groupId>io.appium</groupId> <artifactId>java-client</artifactId> <version>3.2.0</version> </dependency> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.9.7</version> </dependency> </dependencies>
4. Tạo file CalculatorTest.java với 2 nội dung test như sau mulTest() - phép nhân và addTest() - phép cộng, với các id của phần tử được xác định như trong phần 4.2:
package vn.viettuts.calculator; import java.io.File; import java.net.MalformedURLException; import java.net.URL; import java.util.concurrent.TimeUnit; import org.openqa.selenium.WebElement; import org.openqa.selenium.remote.DesiredCapabilities; import org.testng.Assert; import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; import io.appium.java_client.android.AndroidDriver; public class CalculatorTest { AndroidDriver<?> driver; String fileName = "calculator.apk"; File calculatorApp = new File("D:\\AppiumTest\\" + fileName); @BeforeTest public void beforeTest() throws MalformedURLException { DesiredCapabilities cap = new DesiredCapabilities(); cap.setCapability("app", calculatorApp); // khai báo platform cap.setCapability("platformName", "ANDROID"); // khai báo deviceName cap.setCapability("deviceName", "0.0.0.0:4723"); // Tìm app và cài đặt app driver = new AndroidDriver(new URL("http://localhost:4723/wd/hub"), cap); driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); } @Test public void addTest() { WebElement button_2 = driver.findElementById("com.google.android.calculator:id/digit_2"); WebElement button_9 = driver.findElementById("com.google.android.calculator:id/digit_9"); WebElement op_mul = driver.findElementById("com.google.android.calculator:id/op_mul"); WebElement button_equal = driver.findElementById("com.google.android.calculator:id/eq"); button_2.click(); op_mul.click(); button_9.click(); button_equal.click(); WebElement result = driver.findElementById("com.google.android.calculator:id/result"); Assert.assertEquals(result.getText(), "18"); } @Test public void mulTest() { WebElement button_1 = driver.findElementById("com.google.android.calculator:id/digit_1"); WebElement button_9 = driver.findElementById("com.google.android.calculator:id/digit_9"); WebElement op_add = driver.findElementById("com.google.android.calculator:id/op_add"); WebElement button_equal = driver.findElementById("com.google.android.calculator:id/eq"); button_1.click(); op_add.click(); button_9.click(); button_equal.click(); WebElement result = driver.findElementById("com.google.android.calculator:id/result"); Assert.assertEquals(result.getText(), "10"); } @AfterTest public void afterTest() { driver.quit(); } }
5. Để thực thi các phương thức test trong lớp CalculatorTest.java. Click chuột phải vào lớp "CalculatorTest.java" -> Run As -> TestNg Test
Kết quả:
[RemoteTestNG] detected TestNG version 6.9.7 [TestNG] Running: C:\Users\admin\AppData\Local\Temp\testng-eclipse--1429952591\testng-customsuite.xml PASSED: addTest PASSED: mulTest =============================================== Default test Tests run: 2, Failures: 0, Skips: 0 =============================================== =============================================== Default suite Total tests run: 2, Failures: 0, Skips: 0 ===============================================