GitXplorerGitXplorer
H

ATIP

public
0 stars
1 forks
0 issues

Commits

List of commits on branch master.
Unverified
70c7a3ea5c7d132a34ede40c47b0a9e7a62edaa0

Sync with latest code from crosswalk-test-suite/tools/atip/

committed 9 years ago
Unverified
49d13745b4d94ba0be77643d726b4d85096fd7de

Rename func name

committed 9 years ago
Unverified
195a4a3cec5a8b66ca1a3a9223b811cb2087ffa9

Merge pull request #9 from jacky-young/master

HHonry committed 9 years ago
Unverified
f55213ddfeec4df8288bbbaa412fc426b50a9d31

update android project

jjacky-young committed 9 years ago
Unverified
298f9a27e8876eeadc57698a401ca97b1f41241d

Merge pull request #8 from jacky-young/master

HHonry committed 9 years ago
Unverified
7fa882cb143d5ce70531cc49a61890cce2e87477

modify android project

jjacky-young committed 9 years ago

README

The README file for this repository.

ATIP - a new BDD binding library

Introduction

ATIP(Application Test in Python), a "behave" binding library as the bridge between application and BDD to "behave", and use WebDriver and platform interfaces to implement detailed BDD steps for application.

Configuration

Environmental controls. In ATIP usage, you can write the environment initial processes in config file - environment.py. ATIP provides a template of "environment.py" for tests developers. This template supports running tests independently by "behave" tool.

In Crosswalk testing, the template need to know the some test vars, e.g. which device be tested? which test platform? Some WebDriver vars. the vars can be got by following ways:

  • By environment vars:
    TEST_PLATFORM: android, tizen, chrome_ubuntu, others(if have)
    DEVICE_ID
    CONNECT_TYPE: adb, sdb
    WEBDRIVER_VARS: webdriver_url, desired_capabilities, others
    LAUNCHER: XWalkLauncher, CordovaLauncher

ATIP source provides a script "tools/set_env.sh" which can help you to setup those environment vars. Especially, the environment.py template can get those environment vars from Testkit-lite tool automatically:

A JSON config file which named "bdd.json for environment vars sharing, a template provided for reference: "atip/tools/bdd.*.json"

  • Configuration source layout
tools/
|-- set_env.sh
|-- bdd.chrome.json
|-- bdd.android_cordova.json
|-- bdd.android_xwalk.json
`-- bdd.xw_tizen.json

Tests Development

Before below sections, you'd better already pretty familiar with the tests developing with "behave": "behave" docs. A typical "behave" based tests source layout as below:

tests/
|-- environment.py
|-- steps
|   `-- steps.py
`-- test.feature
 
  • test.feature

A simple feature example as below

Feature: api tests
    Scenario: api test 001
        When launch "haha"
         And I go to "http://www.google.com"
         And I wait for 1 seconds
  • steps.py

A simple step example as below

@step(u'I go to "{url}"')
def i_visit_url(context, url):
    url = get_page_url(context, url)
    assert context.web.switch_url(url, True)

ATIP Library

  • WebDriver Library Overview
Category Steps
Web Element Management Create element
Click element
Find element(s) by id
Find element(s) by name
Find element(s) by tag name
Find element(s) by xpath
Find element(s) by class name
Find element(s) by css selector
Find element(s) by link text
Find element(s) by partial link text
Window Management get current window handle
get window position
get window size
maximize window
set window position
set window size
close current window
switch to alert
switch to window
switch to frame
Page Management get url of current page
get source of current page
get page title
refresh current page
forward the page
backward the page
Cookie add cookie
get cookie(s)
delete cookie
delete all cookies
Execution External execute command
execute script synchronously
execute script asynchronously
Image Processing get screenshot as base64
get screenshot as file/png
  • Uiautomator Library Overview
Category Steps
Android System Operation Turn on/off device
Press hard/soft key
Set device orientation
Freeze/unfreeze device rotation
Take screenshot
Open notification
Open quick settings
Identify current launched app
Gesture Action Fling by orientation and direction
Fling to end
Scroll forward vertically
Scroll to end
Scroll to text
Swipe object to some direction
Watcher Management Register watcher
Remove all watchers
Reset all watchers
Run all watchers
Selector Management Select object by key, value and class name
Select any object by value and class name
Select TextView object by name
Select Button object by name
Select Edit object by name
Select ImageView object by name
Select ImageButton object by name
Select View object by desc
Select Web object by desc
Select object by direction and class name
Wait for object show
Wait for object gone
Object Management Click object
Edit text
Get object info from temp by key
Get object info by text
Save object info to temp
  • Functions Category
    "web": web based(Webdriver API) functions
    "native": native based functions (TBD)
    "common": common operations cross different platforms, e.g. call python image lib to compare image files
    "android": Android platform specific functions which is implemented by uiautomator
    "tizen": Tizen platform specific functions

  • "web" steps - done

@step(u'launch "{app_name}"')
@step(u'I launch "{app_name}" with "{apk_pkg_name}" and "{apk_activity_name}"')
@step(u'switch to "{app_name}"')
@step(u'I go to "{url}"')
@step(u'I reload')
@step(u'I go back')
@step(u'I go forward')
@step(u'The current URL should be "{text}"')
@step(u'I should see title "{text}"')
@step(u'I should see "{text}"')
@step(u'I should not see "{text}"')
@step(u'I should see "{text}" in {timeout:d} seconds')
@step(u'I should not see "{text}" in {timeout:d} seconds')
@step(u'I should see "{text}" in "{key}" area')
@step(u'I press "{key}"')
@step(u'press "{key_c}" in "{key_p}"')
@step(u'I click "{key}"')
@step(u'click "{key_c}" in "{key_p}"')
@step(u'I click coords {x:d} and {y:d} of "{key}"')
@step(u'I fill in "{key}" with "{text}"')
@step(u'I check "{key}"')
@step(u'I uncheck "{key}"')
@step(u'I should see an alert')
@step(u'I should not see an alert')
@step(u'I accept the alert')
@step(u'I should see an alert with text "{text}"')
  • "android" steps - done
@step(u'I launch "{app_name}" with "{apk_pkg_name}" and "{apk_activity_name}" on android')
@step(u'I turn on device')
@step(u'I turn off device')
@step(u'I set orientation "{orientation}"')
@step(u'I take screenshot as "{name}"')
@step(u'I open notification')
@step(u'I open quick settings')
@step(u'I press "{key}" key')
@step(u'I scroll to end')
@step(u'I fling "{orientation}" goto "{direction}"')
@step(u'I swipe object "{key}" to "{orientation}"')
@step(u'I force to run all watchers')
@step(u'I remove all watchers')
@step(u'I register watcher "{watcher_name}" when "{when_text}" click "{click_text}"')
@step(u'I register watcher2 "{watcher_name}" when "{when_text1}" and "{when_text2}" click "{click_text}"')
@step(u'I should see text "{text_name}"')
@step(u'I should see image "{image_name}"')
@step(u'I should see web "{web_desc}"')
@step(u'I should see view "{view_desc}"')
@step(u'I should see "{class_name}" on the "{relative}" side of text "{text_name}"')
@step(u'I should see "{class_name}" on the "{relative}" side of view "{view_desc}"')
@step(u'I should see "{class_target}" on the "{relative}" side of any "{class_name}" "{value_name}"')
@step(u'I wait object "{key}" exist for "{time_out}"')
@step(u'I wait object "{key}" gone for "{time_out}"')
@step(u'I click button "{button_name}"')
@step(u'I click other "{class_name}" by "{which_key}" "{which_value}"')
@step(u'I click object "{key}"')
@step(u'I edit text "{edit_text}" to input "{text}"')
@step(u'I edit index {n:d} text to input "{text}"')
@step(u'I compare text "{text_name}" info "{what}" with "{except_result}"')
@step(u'I compare view "{view_desc}" info "{what}" with "{except_result}"')
@step(u'I compare object "{key1}" equal "{key2}" on info "{what}"')
@step(u'I compare object "{key1}" unequal "{key2}" on info "{what}"')
@step(u'I save text object "{text_name}" to temporary value "{key}"')
@step(u'I save view object "{view_desc}" to temporary value "{key}"')
@step(u'I save any object "{class_name}" "{value_name}" to temporary value "{key}"')
@step(u'I save "{class_name}" on the "{relative}" side of text "{text_name}" to temporary value "{key}"')
@step(u'I save "{class_name}" on the "{relative}" side of view "{view_desc}" to temporary value "{key}"')
@step(u'I save "{class_target}" on the "{relative}" side of any "{class_name}" "{value_name}" to temporary value "{key}"')
@step(u'I process text object "{text_name}"')
@step(u'I process view object "{view_desc}"')
@step(u'I process any object "{class_name}" "{value_name}"')
@step(u'I process "{class_name}" on the "{relative}" side of text "{text_name}"')
@step(u'I process "{class_name}" on the "{relative}" side of view "{view_desc}"')
@step(u'I process "{class_target}" on the "{relative}" side of any "{class_name}" "{value_name}"')
@step(u'I reload process result to temporary value "{key}"')
  • "common" steps - done
@step(u'I wait for {timeout:d} seconds')
@step(u'call "{js}" scripts') - TBD
@step(u'call PIL to handle "{image_file}"') - TBD

Run Tests

  • Testkit-lite: Please check testkit-lite project for details
  • Behave: setup test ENVs by set_env.sh or bdd.json firstly, then run "behave" as:
    cd path-to/tests
    behave