Advanced Calabash Android – Make your own server side code!
Để 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. 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 ...
Để 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. 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.
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
-
Đầu tiên, chúng ta sẽ lấy code của calabash-android và calabash-android-server về local và để chung một thư mục.
-
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:
- 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"; } }
- 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'
- 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
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!