-
Elements to take screen shots of and elements to perform action on are now defined differently.
setElementsandsetDynmaicElementsmethods removed.New way to define elements for screenshot:
suite.setCaptureElements('.selector1', '.selector2', ...)
Or using array:
suite.setCaptureElements(['.selector1', '.selector2', ...])
To get element to perform action on, you can now pass selectors directly to the actions:
suite.capture('state', function(actions
, find) { actions.click('.button'); }); To avoid multiple lookups for the same element you can use
findfunction which is now passed to the state callback:suite.capture('state', function(actions, find) { var button = find('.button'); actions.mouseMove(button); .click(button); });
-
Add
suite.before(function(action, find))which can be used to perform some actions before the first state. Context is shared between before hook and all of suite's state callbacks.You can use
beforeto look for element only once for the state:suite.before(function(actions, find) { this.button = find('.buttons'); }) .capture('hovered', function(actions, find) { actions.mouseMove(this.button); }) .capture('pressed', function(actions, find) { actions.mouseDown(this.button); });
Or to perform some actions before first state without taking screenshot:
suite.before(function(actions, find) { actions.click('.button'); });
-
Add
suite.skip()method which allows to skip suite in some set of browsers:suite.skip()- skip in all browsers.suite.skip('chrome')- skip in all versions of Chrome.suite.skip({name: 'chrome', version: '33.0'})- skip in Chrome 33.0suite.skip(['chrome', 'opera'])- skip in Chrome and Opera
-
Public API now has constants for special keys to use in
sendKeysactions (i.e.gemini.CONTROLforCTRLkey).
- Fix a bug with incorrect reference to the suite in states. Because of this bug dynamic elements was not updated properly.
-
New test suites API. Plans are replaced by test suites defined by explicit call.
Old version:
module.exports = function(plan) { plan.setName('some name') .setElements(...) .setDynamicElements(...) .capture(...) };
New API:
var gemini = require('gemini'); gemini.suite('some name', function(suite) { suite.setElements(...) .setDynamicElements(...) .capture(...) };
Suites also can be nested. In this case, child suite inherits all properties from the parent.
gemin.suite('parent', function(suite) { gemini.suite('child', function(child) { gemini.suite('grandchild', function(grandchild) { }); }); });
-
.reload()method is removed. Use nested suite if you need to reload browser. -
Added action to run any JS code in browser context:
actions.executeJS(function(window) { window.alert('Hello!'); });
-
sendKeysaction can optionally take an receive an element to send keys to.actions.sendKeys(elements.someInput, 'hello');
-
Added ability to specify browser version in
.gemini.ymlbrowsers: - {name: 'phantomjs', version: '1.9'}
-
Tree reporter is now used for
gathercommand.
phantomjsalways starts maximized. This fixes the error, when some shadows didn't fit in crop rectangle.- Action on dynamic element that does not currently exists causes non-fatal error. Such error will fail only one state, the rest will continue running.
gathercommand now reports browser name.- browsers are always closed, even if there was an error.
- Initial release