Advanced Calabash Android – Make your own server side code!

I. Mở đầu

Để bắt đầu với bài viết này, chúng ta sẽ xem lại một chút về cơ chế hoạt động của Calabash. refer image: http://developers-club.com/posts/219655/ Calabash sẽ hoạt động thông qua một http server được cài đặt trên thiết bị. Http server này sẽ dựa trên Robotium để giao tiếp với ứng dụng. Dựa vào đặc điểm này, chúng ta có thể mở rộng các tính năng của Calabash bằng cách can thiệp trực tiếp vào http server.

II. Tiếp cận

1. Yêu cầu

Bây giờ chúng ta sẽ tiến hành hiện thực một scenario cụ thể như sau:

Scenario As the user, I want to input my weight. Given I am in the input screen and I see the dialog When I input my weight Then I press DONE on the keyboard And I see the success result

2. Phân tích yêu cầu

  • Yêu cầu đặt ra là hiển thị dialog và cho phép user nhập liệu vào EditText trên dialog này. Điểm đặc biệt của việc nhập liệu này là khi focus vào EditText thì soft-keyboard sẽ hiện thị dưới dạng numberic và có action DONE. Tuy nhiên, Calabash Android đang có issue với Floating Dialog, issue này sẽ ẩn dialog khi chúng ta focus vào EditText của dialog.

  • Để khắc phục issue này, chúng ta cần hiển thị soft-keyboard trước khi hiển thị dialog. Cách này sẽ giữ cho dialog không bị ẩn đi khi chúng ta focus vào EditText trên dialog. Calabash Android chưa hỗ trợ hiển thị soft-keyboard nên chúng ta cần can thiệp vào http server để làm điều này!

3. Hiện thực yêu cầu

  1. Đầu tiên, chúng ta sẽ lấy code của calabash-androidcalabash-android-server về local và để chung một thư mục.

  2. Tiếp đến, chúng ta cần cấu hình Android Studio theo từng bước như hướng dẫn ở đây để có thể làm việc với project. Sau khi hoàn thành các bước ở trên, chúng ta sẽ làm việc với project có cấu trúc như sau:

  1. Chúng ta tạo một class với tên là ShowSoftKeyBoad trong package sh.calaba.instrumentationbackend.actions.text và thêm code như sau:
public class ShowSoftKeyboard implements Action {
    @Override
    public Result execute(String... args) {
        // We will get current Context and InputMethodManager to show the soft-keyboard
        Context context = InstrumentationBackend.getCurrentActivity();
        InputMethodManager imm =
                (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);

        // Show the soft-keyboard
        imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);

        // Notify success result for Calabash
        return Result.successResult();
    }

    @Override
    public String key() {
        // Define command will be used by Calabash
        return "show_soft_keyboard";
    }
}
  1. Sau khi code xong, chúng ta cần build lại server test để apply vào Calabash Android theo hướng dẫn tại đây.

Trong Gemfile chúng ta cấu hình như sau:

source "https://rubygems.org"
gem "calabash-android", '0.9.1.pre2'
gem "cucumber"
gem "my-custom-gem", '0.9.1.pre2', path: './custom_gems'
  1. Quay lại với yêu cầu ban đầu, chúng ta sẽ định nghĩa một step như sau:
Given /^I am in the input screen and I see the dialog$/ do
	…
	perform_action('show_soft_keyboard')
	….
end

Done! Chạy Calabash Android và hưởng thụ kết quả ^^

bundle install

calabash-android build app-stg-debug.apk

calabash-android run app-stg-debug.apk

III. Kết

Hy vọng với những gì mình trình bày ở trên sẽ giúp cho các bạn có thêm một phương pháp tối ưu khi làm việc với Calabash!

All Rights Reserved