Showing posts with label Appium. Show all posts
Showing posts with label Appium. Show all posts

Find your elements faster ios appium in robotframework

Chào các bạn!
Nếu ai đã từng auto cho ios sử dụng appium, thì sẽ nhận ra rằng sử dụng xpath sẽ chậm hơn khá nhiều so với dùng ID hoặc Name.
Hiện tại chúng ta có thể cải thiện tốc độ bằng cách hạn chế sử dụng Xpath.
Thay vào đó chúng ta có thể tìm theo iOS PredicateClass Chain
Bài viết này sẽ hướng dẫn các bạn tăng tốc độ tìm element với ios trong robotframework.
Trước tiên chúng ta sẽ xem tốc độ của xpath so với iOS Predicate và Class Chain là như nào với ví dụ dưới đây



Có thể chúng ta thấy tốc độ chênh lệch nhau không nhiều trong 1 TC. nhưng nếu chúng ta có 100 hay 200 testcase thì chúng ta cũng tiết kiệm được kha khá thời gian đấy :D

ok, giờ chúng ta sẽ đi vào chi tiết như sau:

Cách dùng iOS Predicate 

1. trường hợp đơn giản nhất là button có label là Scrolling

type == 'XCUIElementTypeButton' AND label == "Scrolling"

2. như trường hợp 1 nhưng muốn thêm visiable vào thì như sau:

type == 'XCUIElementTypeButton' AND label == "Scrolling" AND visible == 1

3. trường hợp muốn tìm button có label bắt đầu bằng chữ Scroll

type == 'XCUIElementTypeButton' AND label BEGINSWITH 'Scroll' AND visible == 1

4. trường hợp mà muốn tìm button có chứa Scroll

type == 'XCUIElementTypeButton' AND label CONTAINS 'Scroll' AND visible == 1

Thông tin chi tiết thì các bạn xem thêm ở đây nhé.

Cách dùng Class Chain

1. chọn button thứ 3 sau thằng cha

**/XCUIElementTypeWindow/XCUIElementTypeButton[3]

2. chọn tất cả các các Cell, trong đó name bắt đầu bằng 'B'

**/XCUIElementTypeCell['name BEGINSWITH "B"']

Nhiều cách sử dụng hơn thì xem tại đây nhé

Qua bài viết này, chúng ta có thêm lựa chọn để tăng tốc độ tìm kiếm element trong ios khi dùng appium. Qua đó làm giảm thời gian chạy testcase bằng cách dùng iOS Predicate  và Class Chain để thay thế xpath trong 1 số trường hợp.

Mọi góp ý xin để lại dưới bình lựng!
Xin cảm ơn và hẹn gặp lại các bạn trong các bài tiếp theo!

Code ví dụ có trên github, các bạn clone ở đây nhé


Automation Testing iOS App With Robotframework On Mac OS using Appiumlibrary

Chào các bạn!
Hôm nay 24/12, mình ở nhà trông con, nhân lúc con ngủ thì chúng ta lại gặp nhau trong loạt bài automation testing mobile application.
Bài trước chúng ta đã tìm hiểu cách Automation Testing Android With Robotframework, bài viết này chúng ta sẽ tìm hiểu cách Automation Testing iOS App With Robot framework using Appiumlibrary
Các công cụ cần thiết
  1. Brew
  2. Python
  3. Node JS
  4. Appium server
  5. Cấu hình Xcode lần đầu tiên cài đặt
  6. Cài đặt robot framework
  7. IDE hoặc editor để code robot framework
Bước 1: Cài Brew tại trang chủ
https://brew.sh/ 
Brew là gì? hiểu ngắn gọn nó là trình quản lý các gói phần mềm trên mac os, có thể cài các phần mềm được hỗ trợ = 1 dòng lệnh mà ko cần phải lên tìm, down và cài phần mềm đó.
Truy cập trang chủ, copy và paste dòng đó vào terminal để cài đặt brew.
Sau khi cài xong thì cài thêm các thư viện sau


brew install ideviceinstaller
brew install carthage
brew install libimobiledevice --HEAD
sudo gem install xcpretty    

Bước 2: Cài python 
Cài python qua brew bằng lệnh sau

brew install python

Bước 3: Cài Node JS
Cài node JS qua brew bằng lệnh sau

brew install node

Chú ý: khi cài node js, nếu cần phân quyền thì chạy lệnh sau

sudo chmod 755  /usr/local/lib/node_modules/

Bước 4: Cài Appium server
Cài thông qua node js bằng lệnh sau
4.1 : Để cài phiên bản mới nhất thì chạy lệnh này

npm install -g appium

- Để cài một phiên bản cụ thể thì chạy lệnh này

npm install -g appium@1.9.1

- Cài các thành phần khác liên quan:

npm install -g ios-deploy
npm install -g deviceconsole

4.2:  Nên cài cả Appium Desktop để có thêm lựa chọn selector element
Vào trang chủ, tải và cài đặt Appium desktop http://appium.io/


Bước 5: Cài đặt Xcode
Đăng ký tài khoản, tải và cài đặt Xcode từ trang chủ https://developer.apple.com/xcode/
Sau khi cài đặt xong, chạy Xcode lên và cấu hình như sau:
5.1 : Vào menu Xcode > Preferences > Locations
Mặc định là combobox Command Line Tools sẽ bị trống, click vào ô đó để hiển thị phiên bản hiện tại của xcode


Bước 6: Cài đặt robot framework và appium library
Chạy các lệnh sau để cài đặt robot FW và thư viện Appiumlibrary

pip install robotframework
pip install robotframework-appiumlibrary
pip install six

Bước 7:  Editor để code robotframework
Mình khuyến khích dùng atom, vì gợi ý keyword khá ok

7.1: down và cài đặt Atom tại trang chủ https://atom.io/
7.2: sau khi cài xong, thì chạy lần lượt các lệnh sau trên terminal

apm install language-robot-framework
apm install autocomplete-robot-framework
apm install hyperclick
apm install hyperclick-robot-framework

Bước 8: Viết test case đơn giản cho ios simulator
Mình sẽ làm 1 testcase đơn giản là tạo mới 1 contact trong ứng dụng contact trên ios simualtor
8.1: Bật ios simulator bằng cách mở Xcode lên, vào menu Xcode > Open Developer Tool > Simulator
8.2: Mở appium desktop để bắt element

cách để bắt element trên ios
8.3: Sau khi đã có các element cần thiết thì viết test case đơn giản


*** Settings ***
Library           AppiumLibrary
*** Variables ***
${REMOTE_URL}          http://127.0.0.1:4723/wd/hub
${PLATFORM_NAME}    iOS
${PLATFORM_VERSION}    12.0
${DEVICE_NAME}    iPhone 8 Plus
${BUNDLE_ID}      com.apple.MobileAddressBook
${AutomationName}    XCUITest

*** Keywords ***
Open App Contact
    Open Application    ${REMOTE_URL}    platformName=${PLATFORM_NAME}    platformVersion=${PLATFORM_VERSION}    deviceName=${DEVICE_NAME}      bundleId=${BUNDLE_ID}

Input Phone Number
    [Arguments]     ${phoneNumber}
    Input Text    //XCUIElementTypeTextField[@name="home"]     ${phoneNumber}

Add New Contact
    Wait Until Element Is Visible    //XCUIElementTypeNavigationBar/XCUIElementTypeButton[2]
    Click Element    //XCUIElementTypeNavigationBar/XCUIElementTypeButton[2]


Add New Information
    Wait Until Element Is Visible     //XCUIElementTypeTextField[@name="First name"]
    Input Text    //XCUIElementTypeTextField[@name="First name"]     nguyen    #input first name
    Input Text    //XCUIElementTypeTextField[@name="Last name"]    hai       #input last name
    Capture Page Screenshot
    Click Element    //XCUIElementTypeCell[@name="add phone"]       #click icon add phone
    Input Phone Number    123456679
    Capture Page Screenshot
    Click Element    //XCUIElementTypeButton[@name="Done"]         #click button Done

Verify add new contact success
    Sleep    3s
    Element Should Be Visible    //XCUIElementTypeNavigationBar[@name="CNContactView"]
    Capture Page Screenshot


*** Test Cases ***
TC1_add new contact
    Open App Contact
    Add New Contact
    Add New Information
    Verify add new contact success
    Close Application


code trên atom nhìn khá thích :D
Kết quả sau khi chạy TC, nó thêm vào contact nguyen hai như trong ảnh
Chú ý:
bundleId lấy ở đâu? Nếu là app mặc định của ios, thì google sẽ có :D ví dụ với ios 12 , còn nếu là app do công ty làm thì hỏi dev cho nhanh nhé 

Hẹn gặp các bạn ở bài tiếp theo!
Bài sau mình sẽ giới thiệu các cách bắt element trên ios và android app nhé!

Automation Testing Android With Robotframework On Mac OS using Appiumlibrary

Xin chào các bạn!
Hôm nay chúng ta cùng nhau tìm hiểu và cấu hình để automation test cho android  với robotframework sử dụng thư viện appiumlibrary
Note: bài viết này mình dùng mac os để cấu hình và chạy.
các thứ cần chuẩn bị như sau:

  1. Cài đặt brew
  2. Cài JDK
  3. Cài Android SDK
  4. Cài Robot framework
  5. Cài Appium
  6. Cài Android Emulator
  7. Editor or IDE code Robot Framework


Bước 1: Cài Brew tại trang chủ
https://brew.sh/
Brew là gì? hiểu ngắn gọn nó là trình quản lý các gói phần mềm trên mac os, có thể cài các phần mềm được hỗ trợ = 1 dòng lệnh mà ko cần phải lên tìm, down và cài phần mềm đó.
Truy cập trang chủ, copy và paste dòng đó vào terminal để cài đặt brew.

Bước 2: Cài JDK bằng terminal
chạy lệnh sau để cài JDK

brew cask install java

Bước 3: Cài android SDK tại Trang chủ https://developer.android.com/studio/ 
Sau khi cài xong, cần vào Config để lấy đường dẫn của android SDK


Tiếp đó thì cần set path cho android SDK và java như sau:
3.1: chạy lệnh sau = terminal


sudo open -a TextEdit  ~/.bash_profile

nhấn password của máy và enter để mở bash_profile bằng textedit trên mac os

thêm các dòng sau vào textedit :
chú ý: xxx là tên user của máy bạn.

export ANDROID_HOME=/Users/xxx/Library/Android/sdk
export PATH=$PATH:$ANDROID_HOME
export PATH=$ANDROID_HOME/platform-tools:$PATH
export PATH=$ANDROID_HOME/tools:$PATH



export JAVA_HOME="$(/usr/libexec/java_home)"
export PATH=$PATH:$JAVA_HOME
export PATH=$PATH:$JAVA_HOME/bin

3.2: lưu text edit lại, sau đó chạy lệnh này để update path cho systems

source ~/.bash_profile

Bước 4: Cài robotframework và appiumlibrary
chạy các lệnh sau trên terminal để cài đặt
Note: các keyword và cách dùng của appiumlibrary http://serhatbolsu.github.io/robotframework-appiumlibrary/AppiumLibrary.html

pip install robotframework

pip install robotframework-appiumlibrary

pip install six


Bước 5: Cài Appium.
Các bạn xem lại bài viết tại đây để cài appium nhé



Bước 6: Cài máy ảo android
Các bạn có thể dùng máy ảo của android, nhưng mình thấy khá chậm, mình khuyên dùng genymotion nhé
Note: nhớ tạo account và login rồi tải về


Bước 7:  Editor để code robotframework
Mình khuyến khích dùng atom, vì gợi ý keyword khá ok

7.1: down và cài đặt Atom tại trang chủ  https://atom.io/
7.2: sau khi cài xong, thì chạy lần lượt các lệnh sau trên terminal


apm install language-robot-framework
apm install autocomplete-robot-framework
apm install hyperclick
apm install hyperclick-robot-framework


Bước 8: First testcase for Android using RobotFramework
Chúng ta cùng làm 1 testcase đơn giản cho caculator của android 8 như sau:



*** Settings ***
Library           AppiumLibrary

*** Variables ***
${REMOTE_URL}     http://127.0.0.1:4723/wd/hub    # URL to appium server
${Version Android}    8.0
${name_device}    Android Emulator
*** Keywords ***
Open App Calulator
    Open Application     ${REMOTE_URL}     automationName=UiAutomator2     platformName=Android    platformVersion=${Version Android}    deviceName=${name_device}    appPackage=com.android.calculator2          appActivity=com.android.calculator2.Calculator      noReset=true

*** Test Cases ***
TC1
    Open App Calulator
    Click Element    id=com.android.calculator2:id/digit_9
    Click Element    id=com.android.calculator2:id/op_add
    Click Element    id=com.android.calculator2:id/digit_6
    ${result}=    Get Text    id=com.android.calculator2:id/result
    Should Be Equal As Integers    ${result}    15

Và đây là kết quả sau khi chạy TC



Note:
  1. Trước khi chạy testcase thì cần chạy Appium server + Android Emulator
  2. Trên Mac thì chạy TC của Robotframework bằng terminal như sau:
python -m robot -d a demo.robot

First Android Test with appium and java

Chào các bạn!
Trong bài trước, chúng ta đã cài android sdk. Bài này chúng ta sẽ làm ví dụ đơn giản để test app cho android với appium và java qua các bước cơ bản sau:

1. Cài Appium 

Tải tại http://appium.io và chạy nó lên, nhấn Start Server. Ở chỗ này, hãy chú ý Port 4723. bạn có thể sửa port tùy ý muốn nhưng mình nghĩ nên để mặc định.

2. Cài 1 máy ảo android

Tải và cài 1 máy ảo android tùy chọn, có thể là BlueStacks hoặc Genymotion, rồi chạy máy ảo đó lên

3. Tạo 1 project Maven mới

Sau khi tạo project Maven mới, hãy thêm các dependency sau: Ở đây mình dùng IntelliJ IDEA

<!-- https://mvnrepository.com/artifact/io.appium/java-client -->
<dependency>
    <groupId>io.appium</groupId>
    <artifactId>java-client</artifactId>
    <version>4.1.2</version>
</dependency>


<!-- https://mvnrepository.com/artifact/org.testng/testng --><dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>6.11</version>
    <scope>test</scope>
</dependency>

4. Viết những dòng code đầu tiên

Đoạn  code sau đây sẽ mở ứng dụng calculator mặc định của android lên, và làm phép tính đơn giản


public class haibgit {

    AndroidDriver driver;

    @BeforeClass
    public void Setup() throws MalformedURLException {

        DesiredCapabilities cap = new DesiredCapabilities();
        cap.setCapability("platformName", "ANDROID");
        cap.setCapability("deviceName", "192.168.210.101:5555");
        cap.setCapability("appPackage", "com.android.calculator2");
        cap.setCapability("appActivity","com.android.calculator2.Calculator");
        //cap.setCapability("avd", "Test");

        driver = new AndroidDriver(new URL(
                "http://localhost:4723/wd/hub"), cap);
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

    }

    @Test
    public void SimpleTest() {
        driver.findElementById("com.android.calculator2:id/digit_9").click();
        driver.findElementById("com.android.calculator2:id/op_add").click();
        driver.findElementById("com.android.calculator2:id/digit_6").click();
        Assert.assertEquals("15", driver.findElementById("com.android.calculator2:id/result").getText());
    }
}
5. Giải thích code:

 Sau đây chúng ta sẽ xem những dòng code cần thiết
  • cap.setCapability("deviceName", "192.168.210.101:5555"); dòng này, đoạn IP phía sau là tên của máy ảo, lấy tên máy ảo bằng cách nào? Lấy bằng cách sử dụng lệnh adb devices  
 
  • Lấy appPackage và appActivity của app: Trước tiên cần mở app trên máy ảo, sau đó qua cmd, chạy lệnh adb shell , rồi chạy tiếp dumpsys window windows | grep -E 'mCurrentFocus'


    Chỗ gạch chân đỏ tương ứng với appPackage và appActivity của app
  • driver.findElementById("com.android.calculator2:id/digit_9").click(); 
 Để xác định được các ID của element, thì cần :
1. mở app calculator của android lên,
2. sau đó chạy file uiautomatorviewer.bat tại F:\Anroid_SDK\tools\bin (đường dẫn này là nơi mà bạn để Android SDK), nhấn vào icon như ảnh dưới


Click vào 1 phần tử mà bạn muốn lấy ID của nó


Kết quả chạy code, cùng tận hưởng cảm giác tuyệt vời này :D


Vậy là chúng ta đã viết đoạn code đầu tiên để test app cho android , sử dụng appium + java.
Hẹn gặp các bạn bài tiếp theo.

How to install android sdk without android studio

Như các bạn đã biết, hiện tại trang chủ android không còn cách hướng dẫn cài android sdk 1 cách đầy đủ nữa, vì đã phát triển qua nhiều thế hệ, sdk được tích hợp sâu vào android studio nên cài android sdk khó khăn hơn.
Bài viết này chúng ta sẽ tìm cách cài Android SDK để có thể sử dụng 1 số tool của nó để phục vụ việc auto test app bằng Appium
Phần 1: cài Android SDK
Trước tiên, chúng ta cần cài JDK vào máy tính của mình, xem cách cài tại bài này
Tiếp theo, tải và cài đặt Android SDK tại đây (bản này hơi cũ 1 xíu, nhưng không sao). chúng ta có thể để nó cài mặc định, hoặc tùy chọn vào 1 ổ đĩa khác (cách này mình khuyên dùng, vì sau này cài lại win thì vẫn còn)


Sau khi cài xong thì chạy nó lên, nó đã tự tích sẵn cho chúng ta vài cái như sau:

Ở ảnh này, nó đã tự chọn sẵn cần update như :
  • Android SDK tools, 
  • Android SDK Platform-tools 
  •  Android SDK Build-tools

Ở ảnh này, nó cũng tự chịn giúp chúng ta, nhưng chúng ta chỉ cần SDK Platform của 1 phiên bản android bất kỳ, ví dụ Android 6 hay 7 hoặc 8 gì đó. Sau đó chọn cài đặt các packge như trong ảnh. 
Tiếp theo thì chờ nó tải về và tự giải nén.
Tại sao chỉ cần SDK Platform thôi? vì chúng ta không cần tạo máy ảo = chính android SDK nên không cần mấy cái còn lại, nếu mà tạo máy ảo bằng chính android SDK thì sẽ cần cài.
Trong các bài hướng dẫn tiếp theo về Appium, mình sẽ dùng máy ảo BlueStask để chạy code.
Phần 2: cài Path cho Android SDK
Việc add Path để làm gì?
Để mỗi khi cần gõ lệnh adb, thì không phải vào tận thư mục gốc mà chạy nó, chỉ cần mở cmd ở bất cứ đâu, cứ gõ adb là ok :D
Các bạn xem hướng dẫn cài Path ở bài viết này, và chúng ta sẽ thêm dòng này vào Path:
E:\AndroidSDK\tools;E:\AndroidSDK\platform-tools
Trong đó: E:\AndroidSDK là nơi tôi cài đặt Android SDK ở phần 1
Để kiểm tra xem việc add path đã đúng chưa, hãy mở cmd và gõ adb 

Vậy là qua bài viết này, chúng ta đã biết cài android SDK 1 cách đơn giản. Thực ra mấy năm trước, cài cũng đơn giản lắm, nhưng hiện nay google nó dần tích hợp sdk vào trong android studio để tiện lợi cho việc phát triển phần mềm trên android, nhưng chúng ta thì chỉ cần sdk là đủ, còn việc dùng IDE nào để viết code auto test cho android, thì là sở thích mỗi người, có thể là eclipse, intellij IDEA...
Bài sau chúng ta sẽ cài Appium và viết những dòng code đầu tiên nhé.