Git Product home page Git Product logo

cucapp's Introduction

Welcome to Cuccap

Introduction

Cucapp is an interface between Cucumber (see: http://cukes.info) and Cappuccino.

The Cappuccino application is served via thin and a small piece of code is injected. This code connects back to your Cucumber script via AJAX requests

This code is based heavily on Brominet (see: http://github.com/textarcana/brominet)

Original Concept and Developer: Daniel Parnell (see: https://github.com/dparnell)

Installation

To get started, download the current version of Cuccap:

$ git clone git://github.com/cappuccino/cucapp.git (git)

Then install cucapp on your system:

$ jake install

The following gems are going to be installed:

  • Cucumber
  • Thin
  • Nokogiri
  • JSON
  • Watir-Webdriver

The command cucapp is now available in your system. This command allows you to create a testing architecture for your cappuccino application. To do that, you need to do :

$ cucapp -p  /path/to/your/application

Once you have installed everything, you need to use jake cucumber-test to launch the tests from the cappuccino application folder.

By default, cucapp will launch phantomjs to perform your tests. If you want to to use Chrome or Safari you will need to install the following webdrivers : http://watirwebdriver.com/safari/ - http://watirwebdriver.com/chrome/. Cucapp supports firefox as well.

Usage

Environement Variables

You can set different env variables to configure Cucapp :

Cucapp provides a set of environment variables :

  • CUCAPP_PORT allows you to specify the port used by the Thin server.
  • CUCAPP_APPDIRECTORY allows you to specify where the Cappuccino application is located.
  • CUCAPP_BUNDLE allows you to specify if you want to use the compiled version of Cucapp.
  • CUCAPP_APPLOADINGMODE allows you to specify which version (build or debug) of your Cappuccino application you want to test.
  • BROWSER_FULL_SCREEN allows to put the browser in full screen (true or false which is the default value)
  • BROWSER_SIZE_WIDTH the browser width size.
  • BROWSER_SIZE_HEIGHT the browser height size.
  • BROWSER the browser desired for the test suite. By default it will use firefox.
  • WATIR_CHROME_DRIVER the path where Watir locates your ChromeDriver binary.
  • WATIR_CHROME_SWITCHES the switches for ChromeDriver to start with.

Global variable

The global variable $url_params (which is a dictionary) allows you to specify URL params between each scenarios (need to be changed in the hooks).

Categories

  • CPResponder+CuCapp.j contains a category of CPResponder. It adds the method -(void)setCucappIdentifier:. This cucappIdentifier can be used to identify the control with its XPath. You need to include this category in your Cappuccino application to use cucappIdentifiers. With that, you can use a xpath such as //CPButton[cucappIdentifier='cucappIdentifier-button-bar-add']. This category contains also a CLI mode for Cucapp, more informations below.

  • Cucumber+Extensions.j will be loaded (optionally) by Cucapp when launching Cucumber. It allows you to add new Cappuccino methods needed for your own tests (for instance a method to check the color of a CPView). This file has to be located in features/support/Cucumber+Extensions.j.

Features

Cucapp provides a set of basic methods who can be called from Cucumber (take a look at encumber.rb and Cucumber.j). You should mainly used the following methods :

    def simulate_keyboard_event charac, flags
    def simulate_keyboard_events string, flags
    def simulate_left_click xpath, flags
    def simulate_left_click_on_point x, y, flags
    def simulate_right_click xpath, flags
    def simulate_right_click_on_point x, y, flags
    def simulate_double_click xpath, flags
    def simulate_double_click_on_point x, y, flags
    def simulate_mouse_moved xpath, flags
    def simulate_mouse_moved_on_point x, y, flags
    def simulate_dragged_click_view_to_view xpath1, xpath2, flags
    def simulate_dragged_click_view_to_point xpath1, x, y, flags
    def simulate_dragged_click_point_to_point x, y, x2, y2, flags
    def simulate_scroll_wheel xpath, deltaX, deltaY, flags

Cucapp automatically simulates several CPMouseMoved events between two simulated events generated by the tester. Like a real user does.

Example of a step:

I want to fill a form and send the informations do
 app.gui.wait_for                    "//CPTextField[cucappIdentifier='field-name']"
 app.gui.simulate_left_click         "//CPTextField[cucappIdentifier='field-name']", []
 app.gui.simulate_keyboard_event     "a", [$CPCommandKeyMask]
 app.gui.simulate_keyboard_event     $CPDeleteCharacter, []
 app.gui.simulate_keyboard_events    "my_new_name", []
 app.gui.simulate_keyboard_event     $CPTabCharacter , []
 app.gui.simulate_keyboard_events    "my_new_family_name_", []
 app.gui.simulate_left_click         "//CPButton[cucappIdentifier='button-send']", []
end

The rest is pure Cucumber, don't hesitate to take a look at their website ;) (see: http://cukes.info)

Cucapp provides a screenshot feature. When you want to take a screenshot, you need to perform this code :

    app.gui.make_screenshot_with_name    "name_of_file"

Default steps

Cucuapp provides a set of default steps :

Given the application is launched
When I close the popover
When I hit the key (a character)
When I hit the mask (shift|alt|command|control) and the key (a character)
When I hit the keys (characters)
When I hit the mask (shift|alt|command|control) and the keys (characters)
When I select all
When I save the document
When I (click|right click|double click) on the (field|button etc.) with the value (a value)
When I click on the (field|button etc.) with the property (cucapp-identifier|identifier|tag) set to (an identifier)
When I click with the mask (shift|alt|command|control) on the (field|button etc.) with the property (cucapp-identifier|identifier|tag) set to (an identifier)
When I do a drag and drop from the (field|button etc.) with the value (a value) to the (field|button etc.) with the value (a value)
When I do a drag and drop from the (field|button etc.) with the property (cucapp-identifier|identifier|tag) set to (an identifier) to the (field|button etc.) with the property (cucapp-identifier|identifier|tag) set to (an identifier)
When I do a drag and drop with the key mask (shift|alt|command|control) from the (field|button etc.) with the property (cucapp-identifier|identifier|tag) set to (an identifier) to the (field|button etc.) with the property (cucapp-identifier|identifier|tag)set to (an identifier)
When I (vertically|horizontally) scroll on the (field|button etc.) with the value (a value)
When I (vertically|horizontally) scroll 10 times on the (field|button etc.) with the value (a value)
When I (vertically|horizontally) scroll 10 times on the (field|button etc.) with the property (cucapp-identifier|identifier|tag) set to cappuccino
When I (vertically|horizontally) scroll 10 times on the (field|button etc.) with the property (cucapp-identifier|identifier|tag) set to cappuccino
Then the (field|button etc.) with the property (cucapp-identifier|identifier|tag) set to (an identifier) should not have a value
Then the (field|button etc.) should have the value (a value)
Then the (field|button etc.) with the property (cucapp-identifier|identifier|tag) set to (an identifier) should be focused
Then the (field|button etc.) with the property (cucapp-identifier|identifier|tag) set to (an identifier) should have the value (a value)

The file cappuccino_mappings in the folder feature/support allows you to map word as field or button to Cappuccino keyword as CPTextField or CPButton. You will probably need to update this file to add the controls created for your application.

CLI

Cucapp contains a CLI mode. To use it, make sure your application import the category CPResponder+CuCapp.j and open the javascript console of your browser.

To load the CLI mode, you need to call the function function load_cucapp_CLI(path). The path argument represents the path to the file Cucumber.j. By default this is set to ../../Cucapp/lib/Cucumber.j. Once you have loaded the CLI, you can use the following methods :

function simulate_keyboard_event(character, flags)
function simulate_keyboard_events(string, flags)
function simulate_left_click_on_view(aKey, aValue, flags)
function simulate_left_click_on_point(x, y, flags)
function simulate_right_click_on_view(aKey, aValue, flags)
function simulate_right_click_on_point(x, y, flags)
function simulate_double_click_on_view(aKey, aValue, flags)
function simulate_double_click_on_point(x, y, flags)
function simulate_mouse_moved_on_view(aKey, aValue, flags)
function simulate_mouse_moved_on_point(x, y, flags)
function simulate_dragged_click_view_to_view(aKey, aValue, aKey2, aValue2, flags)
function simulate_dragged_click_view_to_point(aKey, aValue, x, y, flags)
function simulate_dragged_click_point_to_point(x, y, x1, y2, flags)
function simulate_scroll_wheel_on_view(aKey, aValue, deltaX, deltaY, flags)
function find_control(aKey, aValue)

For example, to simulate a left click on a button with a cucappIdentifier set to "button-login", you need to do:

load_cucapp_CLI()
simulate_left_click_on_view(“cucappIdentifier, “button-login", [])

Demo

A full demo of what Cucapp can do is available here.

cucapp's People

Contributors

chris-serafin avatar dogild avatar little-dude avatar minimilk avatar primalmotion avatar william57m avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.