Robot Framework WAVE-library¶
Usage¶
Include keywords with:
Library WAVELibrary
Note
Currently, RIDE is unable to find keywords provided by this library when
this library is imported with Library WAVELibrary
. This can be fixed
by requiring the library with Resource WAVELibrary/keywords.robot
.
(Currently all keywords are written as user keywords, but later they may be
refactored into Python-keywords. If this happens, there will be backwards
compatible wrappers available at keywords.robot
.)
Keywords¶
Open WAVE browser¶
Open Firefox with WAVE-toolbar extension installed.
Open browser about: browser=firefox ff_profile_dir=${FF_PROFILE_DIR}
Check URL for accessibility errors¶
Open the given URL and check it for accessibility errors.
Go to ${URL}
Check accessibility errors
Check accessibility errors¶
Check the current page for accessibility errors
Show WAVE errors, features and alerts
${errors} = Get WAVE errors
${found} = Convert to boolean ${errors}
Run keyword if ${found} Log WAVE errors ${errors}
${url} = Get location
Should be equal ${errors} ${EMPTY} Wave reported errors for ${url}
Hide WAVE errors, features and alerts
Log WAVE errors¶
Tag the current test with Accessibility issues-tag, try to take screenshots of each given accessibility issue and append the errors into the current test log.
Set tags Accessibility issues
Capture page screenshot
Capture WAVE errors
Log ${errors} level=ERROR
Get WAVE errors¶
Extract and return the found WAVE Toolbar errors from the currently open page.
${source} = Get source
${source} = Replace string ${source} \n ${EMPTY}
${source} = Replace string ${source} " \n
${source} = Get lines matching regexp ${source} ^ERROR:.*
Show WAVE errors, features and alerts¶
Activate WAVE Toolbar’s Show WAVE errors, features and alerts action.
Execute Javascript return (function(){ window.wave_viewIcons(); return true; })();
Hide WAVE errors, features and alerts¶
Disable WAVE Toolbar’s Show WAVE errors, features and alerts action.
Execute Javascript return (function(){ window.wave_viewReset(); return true; })();
Capture WAVE errors¶
Try to take a screen capture of each currently visible WAVE toolbar reported error.
@{ids} = Tag WAVE errors
${keyword} = Register keyword to run on failure No operation
: FOR ${id} IN @{ids}
\ Run keyword and ignore error Capture WAVE error ${id}
Register keyword to run on failure ${keyword}
Tag WAVE errors¶
Tag each WAVE toolbar reported error with a unique id and return the ids to ease access to the errors.
${errors} = Execute Javascript return (function(){ var i, id, ids = [], errors = Array.filter( document.getElementsByClassName("wave4tip"), function(el) { return el.alt.match(/^ERROR.*/) !== null; } ); for (i=0; i < errors.length; i++) { id = 'wave-error-' + (new Date().getTime()).toString(); id = id + i.toString(); errors[i].id = id; ids.push(id); } return ids; })();
Capture WAVE error¶
Try to take a screen capture of a currently visible WAVE toolbar reported error tagged with the given id.
Element should be visible id=${ID}
Mouse over ${id}
Element should be visible css=.wave4tooltip
Capture and crop WAVE error ${id}.png ${id}
Crop WAVE error¶
Crop the captured WAVE Toolbar error image saved with the given filename using the bouding box of the given element ids.
${ids} = Convert to string ${ids}
${ids} = Replace string using regexp ${ids} u' '
@{dimensions} = Execute Javascript return (function(){ var ids = ${ids}, i, target, box, style, offset={}; var left = null, top = null, width = null, height = null; for (i = 0; i <= ids.length; i++) { if (i < ids.length) { target = window.document.getElementById(ids[i]); } else { target = window.document.getElementsByClassName( 'wave4tooltip')[0]; } box = target.getBoundingClientRect(); offset.left = Math.round(box.left + window.pageXOffset); offset.top = Math.round(box.top + window.pageYOffset); if (left === null || width === null) { width = box.width; } else { width = Math.max( left + width, offset.left + box.width ) - Math.min(left, offset.left); } if (top === null || height === null) { height = box.height; } else { height = Math.max( top + height, offset.top + box.height ) - Math.min(top, offset.top); } if (left === null) { left = offset.left; } else { left = Math.min(left, offset.left); } if (top === null) { top = offset.top; } else { top = Math.min(top, offset.top); } } return [Math.max(0, left - ${ERROR_CROP_MARGIN}), Math.max(0, top - ${ERROR_CROP_MARGIN}), Math.max(0, width + ${ERROR_CROP_MARGIN} * 2), Math.max(height + ${ERROR_CROP_MARGIN} * 2)]; })();
Crop WAVE error image ${OUTPUT_DIR} ${filename} @{dimensions}
Capture and crop WAVE error¶
Capture and crop WAVE toolbar error to the given filename using the bounding box of the given element ids.
Capture page screenshot ${filename}
Crop WAVE error ${filename} @{locators}
Source¶
*** Settings ***
Library Selenium2Library
Library String
Library WAVELibrary.Cropping
*** Variables ***
${FF_PROFILE_DIR} ${CURDIR}/profile
${ERROR_CROP_MARGIN} 50
*** Keywords ***
Open WAVE browser
[Documentation] Open Firefox with WAVE-toolbar extension installed.
Open browser about: browser=firefox ff_profile_dir=${FF_PROFILE_DIR}
Check URL for accessibility errors
[Documentation] Open the given URL and check it for accessibility errors.
[Arguments] ${URL}
Go to ${URL}
Check accessibility errors
Check accessibility errors
[Documentation] Check the current page for accessibility errors
Show WAVE errors, features and alerts
${errors} = Get WAVE errors
${found} = Convert to boolean ${errors}
Run keyword if ${found} Log WAVE errors ${errors}
${url} = Get location
Should be equal ${errors} ${EMPTY} Wave reported errors for ${url}
Hide WAVE errors, features and alerts
Log WAVE errors
[Documentation] Tag the current test with *Accessibility issues*-tag,
... try to take screenshots of each given accessibility issue
... and append the errors into the current test log.
[Arguments] ${errors}
Set tags Accessibility issues
Capture page screenshot
Capture WAVE errors
Log ${errors} level=ERROR
Get WAVE errors
[Documentation] Extract and return the found WAVE Toolbar errors from the
... currently open page.
${source} = Get source
${source} = Replace string ${source} \n ${EMPTY}
${source} = Replace string ${source} " \n
${source} = Get lines matching regexp ${source} ^ERROR:.*
[return] ${source}
Show WAVE errors, features and alerts
[Documentation] Activate WAVE Toolbar's *Show WAVE errors, features and alerts*
... action.
Execute Javascript
... return (function(){ window.wave_viewIcons(); return true; })();
Hide WAVE errors, features and alerts
[Documentation] Disable WAVE Toolbar's *Show WAVE errors, features and alerts*
... action.
Execute Javascript
... return (function(){ window.wave_viewReset(); return true; })();
Capture WAVE errors
[Documentation] Try to take a screen capture of each currently visible
... WAVE toolbar reported error.
@{ids} = Tag WAVE errors
${keyword} = Register keyword to run on failure No operation
:FOR ${id} IN @{ids}
\ Run keyword and ignore error Capture WAVE error ${id}
Register keyword to run on failure ${keyword}
Tag WAVE errors
[Documentation] Tag each WAVE toolbar reported error with a unique id
... and return the ids to ease access to the errors.
${errors} = Execute Javascript
... return (function(){
... var i, id, ids = [], errors = Array.filter(
... document.getElementsByClassName("wave4tip"),
... function(el) { return el.alt.match(/^ERROR.*/) !== null; }
... );
... for (i=0; i < errors.length; i++) {
... id = 'wave-error-' + (new Date().getTime()).toString();
... id = id + i.toString();
... errors[i].id = id;
... ids.push(id);
... }
... return ids;
... })();
[Return] ${errors}
Capture WAVE error
[Documentation] Try to take a screen capture of a currently visible
... WAVE toolbar reported error tagged with the given id.
[Arguments] ${id}
Element should be visible id=${ID}
Mouse over ${id}
Element should be visible css=.wave4tooltip
Capture and crop WAVE error ${id}.png ${id}
Crop WAVE error
[Documentation] Crop the captured WAVE Toolbar error image saved
... with the given filename using the bouding box of the
... given element ids.
[Arguments] ${filename} @{ids}
${ids} = Convert to string ${ids}
${ids} = Replace string using regexp ${ids} u' '
@{dimensions} = Execute Javascript
... return (function(){
... var ids = ${ids}, i, target, box, style, offset={};
... var left = null, top = null, width = null, height = null;
... for (i = 0; i <= ids.length; i++) {
... if (i < ids.length) {
... target = window.document.getElementById(ids[i]);
... } else {
... target = window.document.getElementsByClassName(
... 'wave4tooltip')[0];
... }
... box = target.getBoundingClientRect();
... offset.left = Math.round(box.left + window.pageXOffset);
... offset.top = Math.round(box.top + window.pageYOffset);
... if (left === null || width === null) {
... width = box.width;
... } else {
... width = Math.max(
... left + width, offset.left + box.width
... ) - Math.min(left, offset.left);
... }
... if (top === null || height === null) {
... height = box.height;
... } else {
... height = Math.max(
... top + height, offset.top + box.height
... ) - Math.min(top, offset.top);
... }
... if (left === null) { left = offset.left; }
... else { left = Math.min(left, offset.left); }
... if (top === null) { top = offset.top; }
... else { top = Math.min(top, offset.top); }
... }
... return [Math.max(0, left - ${ERROR_CROP_MARGIN}),
... Math.max(0, top - ${ERROR_CROP_MARGIN}),
... Math.max(0, width + ${ERROR_CROP_MARGIN} * 2),
... Math.max(height + ${ERROR_CROP_MARGIN} * 2)];
... })();
Crop WAVE error image ${OUTPUT_DIR} ${filename} @{dimensions}
Capture and crop WAVE error
[Documentation] Capture and crop WAVE toolbar error to the given
... filename using the bounding box of the given element ids.
[Arguments] ${filename} @{locators}
Capture page screenshot ${filename}
Crop WAVE error ${filename} @{locators}