diff --git a/seleniumbuilder/chrome/content/html/js/builder/i18n/en.js b/seleniumbuilder/chrome/content/html/js/builder/i18n/en.js
index e9b94cd..7fabbd5 100644
--- a/seleniumbuilder/chrome/content/html/js/builder/i18n/en.js
+++ b/seleniumbuilder/chrome/content/html/js/builder/i18n/en.js
@@ -219,6 +219,7 @@ m.sel2_server_error = "Server Error";
m.sel2_must_playback_in_foreground = "Note: Must leave playback window in foreground during local playback.";
m.sel2_eval_failed = "Script evaluation failed.";
m.sel2_eval_false = "Eval result \"{0}\" does not match \"{1}\".";
+m.sel2_bypass = "ByPass step \{0}\"";
// Step display
m.param_expr_info = "
Parameter expressions of the form ${varname} are replaced by the contents of the variable varname";
@@ -288,6 +289,8 @@ m.misc_sel2_cat = "Misc";
m.assertion_sel2_cat = "Assertion";
m.verify_sel2_cat = "Verify";
m.wait_sel2_cat = "Wait";
+m.bypass_sel2_cat = "ByPass";
+m.bookmarklet_sel2_cat = "BookmarkLets";
m.store_sel2_cat = "Store";
// Data-driven
diff --git a/seleniumbuilder/chrome/content/html/js/builder/i18n/fr.js b/seleniumbuilder/chrome/content/html/js/builder/i18n/fr.js
index 1fa4bc0..c35f494 100644
--- a/seleniumbuilder/chrome/content/html/js/builder/i18n/fr.js
+++ b/seleniumbuilder/chrome/content/html/js/builder/i18n/fr.js
@@ -219,6 +219,7 @@ m.sel2_server_error = "Erreur serveur";
m.sel2_must_playback_in_foreground = "Remarque: Lors du rejeu, la fenêtre active doit rester au premier plan.";
m.sel2_eval_failed = "Echec de l'évaluation.";
m.sel2_eval_false = "le résultat de l'évaluation \"{0}\" ne correspond pas à \"{1}\".";
+m.sel2_bypass = "cette étape a été volontairement éludée (\{0}\")";
// Step display
m.param_expr_info = "
Parameter expressions of the form ${varname} are replaced by the contents of the variable varname";
@@ -288,6 +289,8 @@ m.misc_sel2_cat = "Autre";
m.assertion_sel2_cat = "Assertion";
m.verify_sel2_cat = "Vérification";
m.wait_sel2_cat = "Attente";
+m.bypass_sel2_cat = "Délestage";
+m.bookmarklet_sel2_cat = "Signapplet";
m.store_sel2_cat = "Affectation";
@@ -313,56 +316,69 @@ m.step_refresh = "Raffraichir la page";
m.step_assertTextPresent = "Vérifier la présence du texte (bloquant)";
m.step_verifyTextPresent = "Vérifier la présence du texte";
m.step_waitForTextPresent = "Attendre la présence du texte";
+m.step_bypassTextPresent = "Delester suite à la présence du texte";
m.step_storeTextPresent = "Affecter la présence du texte";
m.step_assertBodyText = "Vérifier le document (bloquant)";
m.step_verifyBodyText = "Vérifier le document";
m.step_waitForBodyText = "Attendre le document";
+m.step_bypassBodyText = "Délester suite au contenu";
m.step_storeBodyText = "Affecter le document";
m.step_assertElementPresent = "Vérifier la balise (bloquant)";
m.step_verifyElementPresent = "Vérifier la balise";
m.step_waitForElementPresent = "Attendre la balise";
+m.step_bypassElementPresent = "Délestage suite à la balise";
m.step_storeElementPresent = "Affecter la balise";
m.step_assertPageSource = "Vérifier le code source (bloquant)";
m.step_verifyPageSource = "Vérifier le code source";
m.step_waitForPageSource = "Attendre le code source";
+m.step_bypassPageSource = "Délester suite au code source";
m.step_storePageSource = "Affecter le code source";
m.step_assertText = "Vérifier le contenu de la balise (bloquant)";
m.step_verifyText = "Vérifier le contenu de la balise";
m.step_waitForText = "Attendre le contenu de la balise";
+m.step_bypassText = "Délester suite au contenu de la balise";
m.step_storeText = "Affecter le contenu de la balise";
m.step_assertCurrentUrl = "Vérifier l'URL (bloquant)";
m.step_verifyCurrentUrl = "Vérifier l'URL";
-m.step_waitForCurrentUrl = "Attendre la page";
+m.step_waitForCurrentUrl = "Attendre l'URL";
+m.step_bypassCurrentUrl = "Délester suite à l'URL";
m.step_storeCurrentUrl = "Affecter l'URL";
m.step_assertTitle = "Vérifier le titre (bloquant)";
m.step_verifyTitle = "Vérifier le titre";
m.step_waitForTitle = "Attendre le titre";
+m.step_bypassTitle = "Délester suite au titre";
m.step_storeTitle = "Affecter le titre";
m.step_assertElementAttribute = "Vérifier l'attribut d'une balise(bloquant)";
m.step_verifyElementAttribute = "Vérifier l'attribut d'une balise";
m.step_waitForElementAttribute = "Attendre l'attribut d'une balise";
+m.step_bypassElementAttribute = "Délester suite à l'attribut d'une balise";
m.step_storeElementAttribute = "Affecter l'attribut d'une balise";
m.step_assertElementStyle = "Vérifier le style d'une balise(bloquant)";
m.step_verifyElementStyle = "Vérifier le style d'une balise";
m.step_waitForElementStyle = "Attendre le style d'une balise";
+m.step_bypassElementStyle = "Délester suite au style d'une balise";
m.step_storeElementStyle = "Affecter le style d'une balise";
m.step_assertElementSelected = "Vérifier la sélection (bloquant)";
m.step_verifyElementSelected = "Vérifier la sélection";
m.step_waitForElementSelected = "Attendre la sélection";
+m.step_bypassElementSelected = "Délester suite à la sélection";
m.step_storeElementSelected = "Affecter la sélection";
m.step_assertElementValue = "Vérifier la valeur d'un composant (bloquant)";
m.step_verifyElementValue = "Vérifier la valeur d'un composant";
m.step_waitForElementValue = "Attendre la valeur d'un composant";
+m.step_bypassElementValue = "Délester suite à la valeur d'un composant";
m.step_storeElementValue = "Affecter la valeur d'un composant";
m.step_addCookie = "Ajouter un cookie";
m.step_deleteCookie = "Supprimer un cookie";
m.step_assertCookieByName = "Vérifier le contenu du cookie (bloquant)";
m.step_verifyCookieByName = "Vérifier le contenu du cookie";
m.step_waitForCookieByName = "Attendre le contenu du cookie";
+m.step_bypassCookieByName = "Délester suite au contenu du cookie";
m.step_storeCookieByName = "Affecter le contenu du cookie";
m.step_assertCookiePresent = "Vérifier (bloquant)";
m.step_verifyCookiePresent = "Vérifier la présence du cookie";
m.step_waitForCookiePresent = "Attendre la présence du cookie";
+m.step_bypassCookiePresent = "Délester suite à la présence du cookie";
m.step_storeCookiePresent = "Affecter la présence du cookie";
m.step_saveScreenshot = "Effectuer une capture d'écran";
m.step_switchToFrame = "Changer de cadre (FRAME)";
@@ -376,18 +392,28 @@ m.step_pause = "Effectuer une pause";
m.step_assertAlertText = "Vérifier le message d'alerte (bloquant)";
m.step_verifyAlertText = "Vérifier le message d'alerte";
m.step_waitForAlertText = "Attendre le message d'alerte";
+m.step_bypassAlertText = "Délester suite au message d'alerte";
m.step_storeAlertText = "Affecter le message d'alerte";
m.step_assertAlertPresent = "Vérifier la présence d'une alerte (bloquant)";
m.step_verifyAlertPresent = "Vérifier la présence d'une alerte ";
m.step_waitForAlertPresent = "Attendre l'affichage d'une alerte ";
+m.step_bypassAlertPresent = "Délester suite à l'affichage d'une alerte ";
m.step_storeAlertPresent = "Affecter la présence d'une alerte ";
m.step_assertEval = "Vérifier le script (bloquant)";
m.step_verifyEval = "Vérifier le script";
m.step_waitForEval = "Attendre la fin du script";
+m.step_bypassEval = "Délester suite à la fin du script";
m.step_storeForEval = "Affecter le résultat du script";
m.step_answerAlert = "Compléter la boite de dialogue";
m.step_acceptAlert = "Acquitter la boite de dialogue";
m.step_dismissAlert = "Répudier la boite de dialogue";
+m.step_printWindowName = "Affiche le nom de la fenêtre courante";
+m.step_renameWindow = "Renommer la fenêtre";
+m.step_forceTargets = "Forcer le nom des fenêtres cibles";
+m.step_deleteComments = "Supprimer les commentaires du code source";
+m.step_deleteCachesUrls = "Supprimer les paramètres de caches des liens";
+m.step_deleteHiddenValues = "Supprimer les données cachées (input[hidden])";
+
m.p_attributeName = "Attribut";
m.p_file = "Fichier";
m.p_locator = "Localisation";
diff --git a/seleniumbuilder/chrome/content/html/js/builder/selenium2/docs.js b/seleniumbuilder/chrome/content/html/js/builder/selenium2/docs.js
index e0ec426..597f3ff 100644
--- a/seleniumbuilder/chrome/content/html/js/builder/selenium2/docs.js
+++ b/seleniumbuilder/chrome/content/html/js/builder/selenium2/docs.js
@@ -76,6 +76,10 @@ builder.selenium2.docs = {
"params": {"text": "The expected alert text." },
"description": "Wait for an alert showing with the given text."
},
+ "bypassAlertText": {
+ "params": {"text": "The expected alert text." ,"nbstep":"number of step to bypass"},
+ "description": "bypass n steps that there is an alert showing with the given text."
+ },
"storeAlertText": {
"params": {"variable": "The name of the variable to store the text in." },
"description": "Store the text of the visible alert in the given variable."
@@ -92,6 +96,10 @@ builder.selenium2.docs = {
"params": {},
"description": "Wait for an alert."
},
+ "bypassForAlertPresent": {
+ "params": {"nbstep":"number of step to bypass"},
+ "description": "bypass n steps that there is an alert."
+ },
"storeAlertPresent": {
"params": {"variable": "The name of the variable to store in whether an alert is present." },
"description": "Store whether an alert is present in the given variable."
@@ -235,6 +243,12 @@ builder.selenium2.docs = {
},
"description": "Waits until the current URL is the given value."
},
+ "bypassCurrentUrl": {
+ "params": {
+ "url": "The URL we want to be at."
+ },
+ "description": "Waits until the current URL is the given value."
+ },
"storeCurrentUrl": {
"params": {
"variable": "The name of the variable to store the URL in."
@@ -259,6 +273,12 @@ builder.selenium2.docs = {
},
"description": "Waits for the current page to have the given title."
},
+ "bypassTitle": {
+ "params": {
+ "title": "Title we want the current page to have."
+ },
+ "description": "Waits for the current page to have the given title."
+ },
"storeTitle": {
"params": {
"variable": "Name of the variable to store the title into."
@@ -286,6 +306,13 @@ builder.selenium2.docs = {
},
"description": "Waits for the given element containing exactly the given text."
},
+ "bypassText": {
+ "params": {
+ "locator": "How to find the element whose text to test.",
+ "text": "The text we want the element to have."
+ },
+ "description": "Waits for the given element containing exactly the given text."
+ },
"storeText": {
"params": {
"variable": "The name of the variable to store the element's text in.",
@@ -311,6 +338,12 @@ builder.selenium2.docs = {
},
"description": "Waits for the given text to appear somewhere on the page."
},
+ "bypassTextPresent": {
+ "params": {
+ "text": "The text we want to feature on the page."
+ },
+ "description": "Waits for the given text to appear somewhere on the page."
+ },
"storeTextPresent": {
"params": {
"variable": "The name of the variable to store whether the given text is on the page.",
@@ -336,6 +369,12 @@ builder.selenium2.docs = {
},
"description": "Waits for the text of the entire page body to be as given."
},
+ "bypassBodyText": {
+ "params": {
+ "text": "The text we want the entire page to be."
+ },
+ "description": "Waits for the text of the entire page body to be as given."
+ },
"storeBodyText": {
"params": {
"variable": "The name of the variable to store the page body text in."
@@ -360,6 +399,12 @@ builder.selenium2.docs = {
},
"description": "Waits for the page source to be as given."
},
+ "bypassPageSource": {
+ "params": {
+ "source": "The expected page source."
+ },
+ "description": "Waits for the page source to be as given."
+ },
"storePageSource": {
"params": {
"variable": "The name of the variable to store the page source in."
@@ -384,6 +429,12 @@ builder.selenium2.docs = {
},
"description": "Waits for an element to exist."
},
+ "bypassElementPresent": {
+ "params": {
+ "locator": "How to find the element."
+ },
+ "description": "Waits for an element to exist."
+ },
"storeElementPresent": {
"params": {
"variable": "Name of the variable to store the attribute value in.",
@@ -409,6 +460,12 @@ builder.selenium2.docs = {
},
"description": "Waits for an element to be selected."
},
+ "bypassElementSelected": {
+ "params": {
+ "locator": "How to find the element."
+ },
+ "description": "Waits for an element to be selected."
+ },
"storeElementSelected": {
"params": {
"variable": "Name of the variable to store the attribute value in.",
@@ -440,6 +497,14 @@ builder.selenium2.docs = {
},
"description": "Waits for an element's attribute to assume a specific value."
},
+ "bypassElementAttribute": {
+ "params": {
+ "locator": "How to find the element.",
+ "attributeName": "The name of the attribute to check.",
+ "value": "The value we want the attribute to have."
+ },
+ "description": "Waits for an element's attribute to assume a specific value."
+ },
"storeElementAttribute": {
"params": {
"variable": "Name of the variable to store the attribute value in.",
@@ -472,6 +537,14 @@ builder.selenium2.docs = {
},
"description": "Waits for an element's CSS style property to assume a specific value."
},
+ "bypassElementStyle": {
+ "params": {
+ "locator": "How to find the element.",
+ "propertyName": "The name of the CSS style property to check.",
+ "value": "The value we want the property to have."
+ },
+ "description": "Waits for an element's CSS style property to assume a specific value."
+ },
"storeElementStyle": {
"params": {
"variable": "Name of the variable to store the property value in.",
@@ -501,6 +574,13 @@ builder.selenium2.docs = {
},
"description": "Waits for an element's value to become the given one."
},
+ "bypassElementValue": {
+ "params": {
+ "locator": "How to find the element.",
+ "value": "The value we want the element to have."
+ },
+ "description": "Waits for an element's value to become the given one."
+ },
"storeElementValue": {
"params": {
"variable": "The name of the variable to store the element's value in.",
@@ -526,6 +606,12 @@ builder.selenium2.docs = {
},
"description": "Waits for a cookie with the given name to be present."
},
+ "bypassCookiePresent": {
+ "params": {
+ "name": "The cookie's name."
+ },
+ "description": "Waits for a cookie with the given name to be present."
+ },
"storeCookiePresent": {
"params": {
"variable": "The name of the variable where to store whether the cookie exists.",
@@ -554,6 +640,13 @@ builder.selenium2.docs = {
},
"description": "Waits for a cookie with the given name and value to be present."
},
+ "bypassCookieByName": {
+ "params": {
+ "name": "The cookie's name.",
+ "value": "The value (content) the cookie is expected to have."
+ },
+ "description": "Waits for a cookie with the given name and value to be present."
+ },
"storeCookieByName": {
"params": {
"variable": "The name of the variable to store the cookie's value in.",
@@ -582,12 +675,43 @@ builder.selenium2.docs = {
},
"description": "Waits for the given script to evaluate to the given value. Use 'return' to return the result of the evaluation, e.g. 'return 3'."
},
+ "bypassEval": {
+ "params": {
+ "script": "A JavaScript expression to be evaluated.",
+ "value": "The value the script is expected to evaluate to."
+ },
+ "description": "Waits for the given script to evaluate to the given value. Use 'return' to return the result of the evaluation, e.g. 'return 3'."
+ },
"storeEval": {
"params": {
"variable": "The name of the variable to store evaluation result in.",
"script": "A JavaScript expression to be evaluated. Use 'return' to return the result of the evaluation, e.g. 'return 3'."
},
"description": "Evaluates a JavaScript expression and stores the result in a variable."
+ },
+ "printWindowName": {
+ "description": "Print out the currrent window name."
+ },
+ "renameWindow": {
+ "params" : {
+ "name": "a current window new name"
+ },
+ "description": "Name or Rename the current window DOM object."
+ },
+ "forceTargets": {
+ "params" : {
+ "name": "a target value or framename (current value:\"_blank\",\"_self\",\"_parent\",\"_top\",...)"
+ },
+ "description": "force all links to specifie name to linked document (href and open)"
+ },
+ "deleteComments": {
+ "description": "delete all comments of the html structure"
+ },
+ "deleteCachesUrls": {
+ "description": "delete all params of urls image / css / js"
+ },
+ "deleteHiddenValues": {
+ "description": "delete data value of hidden input tags"
}
};
diff --git a/seleniumbuilder/chrome/content/html/js/builder/selenium2/io/io.js b/seleniumbuilder/chrome/content/html/js/builder/selenium2/io/io.js
index 563e4ae..2f1178b 100644
--- a/seleniumbuilder/chrome/content/html/js/builder/selenium2/io/io.js
+++ b/seleniumbuilder/chrome/content/html/js/builder/selenium2/io/io.js
@@ -235,7 +235,7 @@ builder.selenium2.io.canExport = function(lang_info, stepType) {
if (!lang_info.getters || !lang_info.boolean_getters) { return false; }
var booleanVersion = false;
for (var b = 0; b < 2; b++) {
- var stepFlavors = ["assert", "verify", "waitFor", "store"];
+ var stepFlavors = ["assert", "verify", "waitFor", "bypass", "store"];
for (var f = 0; f < stepFlavors.length; f++) {
var flavor_key = (booleanVersion ? "boolean_" : "") + stepFlavors[f];
if (stepType.name.startsWith(stepFlavors[f]) && lang_info[flavor_key] !== undefined) {
@@ -280,7 +280,7 @@ builder.selenium2.io.createLangFormatter = function(lang_info) {
} else {
var booleanVersion = false;
for (var b = 0; b < 2; b++) {
- var stepFlavors = ["assert", "verify", "waitFor", "store"];
+ var stepFlavors = ["assert", "verify", "waitFor", "bypass", "store"];
for (var f = 0; f < stepFlavors.length; f++) {
var flavor_key = (booleanVersion ? "boolean_" : "") + stepFlavors[f];
if (step.type.name.startsWith(stepFlavors[f]) && lang_info[flavor_key] !== undefined) {
diff --git a/seleniumbuilder/chrome/content/html/js/builder/selenium2/playback.js b/seleniumbuilder/chrome/content/html/js/builder/selenium2/playback.js
index 47ef663..01be16f 100644
--- a/seleniumbuilder/chrome/content/html/js/builder/selenium2/playback.js
+++ b/seleniumbuilder/chrome/content/html/js/builder/selenium2/playback.js
@@ -36,6 +36,8 @@ builder.selenium2.playback.implicitWaitCycle = 0;
builder.selenium2.playback.implicitWaitTimeout = null;
/** The session start timeout. */
builder.selenium2.playback.sessionStartTimeout = null;
+/** The bypass decrement. */
+builder.selenium2.playback.byPassCounter = 0;
/** The pause incrementor. */
builder.selenium2.playback.pauseCounter = 0;
/** The pause interval. */
@@ -511,6 +513,17 @@ builder.selenium2.playback.playbackFunctions = {
}, /*error*/ function() { callback(false); });
});
},
+ "bypassTextPresent": function() {
+ builder.selenium2.playback.findElement({type: 'tag name', value: 'body'}, function(result) {
+ builder.selenium2.playback.execute('getElementText', {id: result.value.ELEMENT}, function(result) {
+ if (result.value.indexOf(builder.selenium2.playback.param("text")) != -1) {
+ builder.selenium2.playback.recordResult({success: true});
+ }/* else {
+ builder.selenium2.playback.recordError(_t('sel2_text_not_present', builder.selenium2.playback.param("text")));
+ }*/
+ });
+ });
+ },
"storeTextPresent": function() {
builder.selenium2.playback.findElement({type: 'tag name', value: 'body'}, function(result) {
builder.selenium2.playback.execute('getElementText', {id: result.value.ELEMENT}, function(result) {
@@ -551,6 +564,17 @@ builder.selenium2.playback.playbackFunctions = {
}, /*error*/ function() { callback(false); });
});
},
+ "bypassBodyText": function() {
+ builder.selenium2.playback.findElement({type: 'tag name', value: 'body'}, function(result) {
+ builder.selenium2.playback.execute('getElementText', {id: result.value.ELEMENT}, function(result) {
+ if (result.value == builder.selenium2.playback.param("text")) {
+ builder.selenium2.playback.recordResult({success: true});
+ } else {
+ builder.selenium2.playback.recordResult({success: false, message: _t('sel2_body_text_does_not_match', builder.selenium2.playback.param("text"))});
+ }
+ });
+ });
+ },
"storeBodyText": function() {
builder.selenium2.playback.findElement({type: 'tag name', value: 'body'}, function(result) {
builder.selenium2.playback.execute('getElementText', {id: result.value.ELEMENT}, function(result) {
@@ -578,6 +602,11 @@ builder.selenium2.playback.playbackFunctions = {
);
});
},
+ "bypassElementPresent": function() {
+ builder.selenium2.playback.findElement(builder.selenium2.playback.param("locator"), null, function(result) {
+ builder.selenium2.playback.recordResult({success: false, message: _t('sel2_element_not_found')});
+ });
+ },
"storeElementPresent": function() {
builder.selenium2.playback.findElement(builder.selenium2.playback.param("locator"),
/*success*/
@@ -617,6 +646,15 @@ builder.selenium2.playback.playbackFunctions = {
}, /*error*/ function() { callback(false); });
});
},
+ "bypassyPageSource": function() {
+ builder.selenium2.playback.execute('getPageSource', {}, function(result) {
+ if (result.value == builder.selenium2.playback.param("source")) {
+ builder.selenium2.playback.recordResult({success: true});
+ } else {
+ builder.selenium2.playback.recordResult({success: false, message: _t('sel2_source_does_not_match')});
+ }
+ });
+ },
"storePageSource": function() {
builder.selenium2.playback.execute('getPageSource', {}, function(result) {
builder.selenium2.playback.vars[builder.selenium2.playback.param("variable")] = result.value;
@@ -655,6 +693,17 @@ builder.selenium2.playback.playbackFunctions = {
}, /*error*/ function() { callback(false); });
});
},
+ "bypassText": function() {
+ builder.selenium2.playback.findElement(builder.selenium2.playback.param("locator"), function(result) {
+ builder.selenium2.playback.execute('getElementText', {id: result.value.ELEMENT}, function(result) {
+ if (result.value == builder.selenium2.playback.param("text")) {
+ builder.selenium2.playback.recordResult({success: true});
+ } else {
+ builder.selenium2.playback.recordResult({success: false, message: _t('sel2_element_text_does_not_match', result.value, builder.selenium2.playback.param("text"))});
+ }
+ });
+ });
+ },
"storeText": function() {
builder.selenium2.playback.findElement(builder.selenium2.playback.param("locator"), function(result) {
builder.selenium2.playback.execute('getElementText', {id: result.value.ELEMENT}, function(result) {
@@ -689,6 +738,15 @@ builder.selenium2.playback.playbackFunctions = {
}, /*error*/ function() { callback(false); });
});
},
+ "bypassCurrentUrl": function() {
+ builder.selenium2.playback.execute('getCurrentUrl', {}, function(result) {
+ if (result.value == builder.selenium2.playback.param("url")) {
+ builder.selenium2.playback.recordResult({success: true});
+ } else {
+ builder.selenium2.playback.recordResult({success: false, message: _t('sel2_url_does_not_match', result.value, builder.selenium2.playback.param("url"))});
+ }
+ });
+ },
"storeCurrentUrl": function() {
builder.selenium2.playback.execute('getCurrentUrl', {}, function(result) {
builder.selenium2.playback.vars[builder.selenium2.playback.param("variable")] = result.value;
@@ -721,6 +779,15 @@ builder.selenium2.playback.playbackFunctions = {
}, /*error*/ function() { callback(false); });
});
},
+ "bypassTitle": function() {
+ builder.selenium2.playback.execute('getTitle', {}, function(result) {
+ if (result.value == builder.selenium2.playback.param("title")) {
+ builder.selenium2.playback.recordResult({success: true});
+ } else {
+ builder.selenium2.playback.recordResult({success: false, message: _t('sel2_title_does_not_match', result.value, builder.selenium2.playback.param("title"))});
+ }
+ });
+ },
"storeTitle": function() {
builder.selenium2.playback.execute('getTitle', {}, function(result) {
builder.selenium2.playback.vars[builder.selenium2.playback.param("variable")] = result.value;
@@ -759,6 +826,17 @@ builder.selenium2.playback.playbackFunctions = {
}, /*error*/ function() { callback(false); });
});
},
+ "bypassElementSelected": function() {
+ builder.selenium2.playback.findElement(builder.selenium2.playback.param("locator"), function(result) {
+ builder.selenium2.playback.execute('isElementSelected', {id: result.value.ELEMENT}, function(result) {
+ if (result.value) {
+ builder.selenium2.playback.recordResult({success: true});
+ } else {
+ builder.selenium2.playback.recordResult({success: false, message: _t('sel2_element_not_selected')});
+ }
+ });
+ });
+ },
"storeElementSelected": function() {
builder.selenium2.playback.findElement(builder.selenium2.playback.param("locator"), function(result) {
builder.selenium2.playback.execute('isElementSelected', {id: result.value.ELEMENT}, function(result) {
@@ -799,6 +877,17 @@ builder.selenium2.playback.playbackFunctions = {
}, /*error*/ function() { callback(false); });
});
},
+ "bypassElementValue": function() {
+ builder.selenium2.playback.findElement(builder.selenium2.playback.param("locator"), function(result) {
+ builder.selenium2.playback.execute('getElementAttribute', {id: result.value.ELEMENT, name: 'value'}, function(result) {
+ if (result.value == builder.selenium2.playback.param("value")) {
+ builder.selenium2.playback.recordResult({success: true});
+ } else {
+ builder.selenium2.playback.recordResult({success: false, message: _t('sel2_element_value_doesnt_match', result.value, builder.selenium2.playback.param("value"))});
+ }
+ });
+ });
+ },
"storeElementValue": function() {
builder.selenium2.playback.findElement(builder.selenium2.playback.param("locator"), function(result) {
builder.selenium2.playback.execute('getElementAttribute', {id: result.value.ELEMENT, name: 'value'}, function(result) {
@@ -839,6 +928,17 @@ builder.selenium2.playback.playbackFunctions = {
}, /*error*/ function() { callback(false); });
});
},
+ "bypassElementAttribute": function() {
+ builder.selenium2.playback.findElement(builder.selenium2.playback.param("locator"), function(result) {
+ builder.selenium2.playback.execute('getElementAttribute', {id: result.value.ELEMENT, name: builder.selenium2.playback.param("attributeName") }, function(result) {
+ if (result.value == builder.selenium2.playback.param("value")) {
+ builder.selenium2.playback.recordResult({success: true});
+ } else {
+ builder.selenium2.playback.recordResult({success: false, message: _t('sel2_attribute_value_doesnt_match', builder.selenium2.playback.param("attributeName"), result.value, builder.selenium2.playback.param("value"))});
+ }
+ });
+ });
+ },
"storeElementAttribute": function() {
builder.selenium2.playback.findElement(builder.selenium2.playback.param("locator"), function(result) {
builder.selenium2.playback.execute('getElementAttribute', {id: result.value.ELEMENT, name: builder.selenium2.playback.param("attributeName") }, function(result) {
@@ -879,6 +979,17 @@ builder.selenium2.playback.playbackFunctions = {
}, /*error*/ function() { callback(false); });
});
},
+ "bypassElementStyle": function() {
+ builder.selenium2.playback.findElement(builder.selenium2.playback.param("locator"), function(result) {
+ builder.selenium2.playback.execute('getElementValueOfCssProperty', {id: result.value.ELEMENT, propertyName: builder.selenium2.playback.param("propertyName") }, function(result) {
+ if (result.value == builder.selenium2.playback.param("value")) {
+ builder.selenium2.playback.recordResult({success: true});
+ } else {
+ builder.selenium2.playback.recordResult({success: false, message: _t('sel2_css_value_doesnt_match', builder.selenium2.playback.param("propertyName"), result.value, builder.selenium2.playback.param("value"))});
+ }
+ });
+ });
+ },
"storeElementStyle": function() {
builder.selenium2.playback.findElement(builder.selenium2.playback.param("locator"), function(result) {
builder.selenium2.playback.execute('getElementValueOfCssProperty', {id: result.value.ELEMENT, propertyName: builder.selenium2.playback.param("propertyName") }, function(result) {
@@ -952,6 +1063,21 @@ builder.selenium2.playback.playbackFunctions = {
/*error*/ function() { callback(false); });
});
},
+ "bypassCookieByName": function() {
+ builder.selenium2.playback.execute('getCookies', {}, function(result) {
+ for (var i = 0; i < result.value.length; i++) {
+ if (result.value[i].name == builder.selenium2.playback.param("name")) {
+ if (result.value[i].value == builder.selenium2.playback.param("value")) {
+ builder.selenium2.playback.recordResult({success: true});
+ } else {
+ builder.selenium2.playback.recordResult({success: false, message: _t('sel2_cookie_value_doesnt_match', builder.selenium2.playback.param("name"), result.value[i].value, builder.selenium2.playback.param("value"))});
+ }
+ return;
+ }
+ }
+ builder.selenium2.playback.recordResult({success: false, message: _t('sel2_no_cookie_found', builder.selenium2.playback.param("name"))});
+ });
+ },
"storeCookieByName": function() {
builder.selenium2.playback.execute('getCookies', {}, function(result) {
for (var i = 0; i < result.value.length; i++) {
@@ -1001,6 +1127,17 @@ builder.selenium2.playback.playbackFunctions = {
/*error*/ function() { callback(false); });
});
},
+ "bypassCookiePresent": function() {
+ builder.selenium2.playback.execute('getCookies', {}, function(result) {
+ for (var i = 0; i < result.value.length; i++) {
+ if (result.value[i].name == builder.selenium2.playback.param("name")) {
+ builder.selenium2.playback.recordResult({success: true});
+ return;
+ }
+ }
+ builder.selenium2.playback.recordResult({success: false, message: _t('sel2_no_cookie_found', builder.selenium2.playback.param("name"))});
+ });
+ },
"storeCookiePresent": function() {
builder.selenium2.playback.execute('getCookies', {}, function(result) {
for (var i = 0; i < result.value.length; i++) {
@@ -1064,6 +1201,15 @@ builder.selenium2.playback.playbackFunctions = {
}, /*error*/ function() { callback(false); });
});
},
+ "bypassAlertText": function() {
+ builder.selenium2.playback.execute('getAlertText', {}, function(result) {
+ if (result.value == builder.selenium2.playback.param("text")) {
+ builder.selenium2.playback.recordResult({success: true});
+ } else {
+ builder.selenium2.playback.recordResult({success: false, message: _t('sel2_alert_text_does_not_match', result.value, builder.selenium2.playback.param("text"))});
+ }
+ });
+ },
"storeAlertText": function() {
builder.selenium2.playback.execute('getAlertText', {}, function(result) {
builder.selenium2.playback.vars[builder.selenium2.playback.param("variable")] = result.value;
@@ -1092,6 +1238,13 @@ builder.selenium2.playback.playbackFunctions = {
}, /*error*/ function() { callback(false); });
});
},
+ "bypassAlertPresent": function() {
+ builder.selenium2.playback.execute('getAlert', {}, function(result) {
+ builder.selenium2.playback.recordResult({success: true});
+ }, /*error*/ function() {
+ builder.selenium2.playback.recordResult({success: false, message: _t('sel2_no_alert_present')});
+ });
+ },
"storeAlertPresent": function() {
builder.selenium2.playback.execute('getAlert', {}, function(result) {
builder.selenium2.playback.vars[builder.selenium2.playback.param("variable")] = true;
@@ -1147,6 +1300,17 @@ builder.selenium2.playback.playbackFunctions = {
}, /*error*/ function() { callback(false); });
});
},
+ "bypassEval": function() {
+ builder.selenium2.playback.execute('executeScript', { 'script': builder.selenium2.playback.param("script"), 'args': [] }, function(result) {
+ if (str(result.value) == builder.selenium2.playback.param("value")) {
+ builder.selenium2.playback.recordResult({success: true});
+ } else {
+ builder.selenium2.playback.recordResult({success: false, message: _t('sel2_eval_false', result.value, builder.selenium2.playback.param("value"))});
+ }
+ }, /*error*/ function() {
+ builder.selenium2.playback.recordResult({success: false, message: _t('sel2_eval_failed')});
+ });
+ },
"storeEval": function() {
builder.selenium2.playback.execute('executeScript', { 'script': builder.selenium2.playback.param("script"), 'args': [] }, function(result) {
builder.selenium2.playback.vars[builder.selenium2.playback.param("variable")] = str(result.value);
@@ -1154,19 +1318,66 @@ builder.selenium2.playback.playbackFunctions = {
}, /*error*/ function() {
builder.selenium2.playback.recordError(_t('sel2_eval_failed'));
});
+ },
+ "printWindowName": function() {
+ builder.selenium2.playback.execute('executeScript', { 'script': 'return window.name;', 'args': [] }, function(result) {
+ builder.selenium2.playback.print(str(result.value));
+ builder.selenium2.playback.recordResult({success: true});
+ }, /*error*/ function() {
+ builder.selenium2.playback.recordError(_t('sel2_eval_failed'));
+ });
+ },
+ "renameWindow": function() {
+ builder.selenium2.playback.execute('executeScript', { 'script': 'return (window.name="'+builder.selenium2.playback.param("name")+'");', 'args': [] }, function(result) {
+ builder.selenium2.playback.recordResult({success: true});
+ }, /*error*/ function() {
+ builder.selenium2.playback.recordError(_t('sel2_eval_failed'));
+ });
+ },
+ "forceTargets": function() {
+ builder.selenium2.playback.execute('executeScript', { 'script': 'var a=document.querySelectorAll("a[href]");[].forEach.call(a,function(e){e.setAttribute("target","'+builder.selenium2.playback.param("name")+'");});return 1;', 'args': [] }, function(result) {
+ builder.selenium2.playback.recordResult({success: true});
+ }, /*error*/ function() {
+ builder.selenium2.playback.recordError(_t('sel2_eval_failed'));
+ });
+ },
+ "deleteComments": function() {
+ builder.selenium2.playback.execute('executeScript', { 'script': 'var t=document.createTreeWalker(document.documentElement,NodeFilter.SHOW_COMMENT, null, false),c=[];while(t.nextNode()){c.push(t.currentNode);}[].forEach.call(c,function(e){e.parentNode.removeChild(e);});return 1;', 'args': [] }, function(result) {
+ builder.selenium2.playback.recordResult({success: true});
+ }, /*error*/ function() {
+ builder.selenium2.playback.recordError(_t('sel2_eval_failed'));
+ });
+ },
+ "deleteCachesUrls": function() {
+ builder.selenium2.playback.execute('executeScript', { 'script': "var a=document.querySelectorAll('link[href*=\"?\"],img[src*=\"?\"],script[src*=\"?\"]');[].forEach.call(a,function(e){var a=e.href||e.src;var b =a.substr(0,a.indexOf('\\?'));(e.src)?e.src=b:e.href=b;});return 1;", 'args': [] }, function(result) {
+ builder.selenium2.playback.recordResult({success: true});
+ }, /*error*/ function() {
+ builder.selenium2.playback.recordError(_t('sel2_eval_failed'));
+ });
+ },
+ "deleteHiddenValues": function() {
+ builder.selenium2.playback.execute('executeScript', { 'script': "var a=document.querySelectorAll('input[type=\"hidden\"]');[].forEach.call(a,function(e){a.parentNode.removeChild(a);});return 1;", 'args': [] }, function(result) {
+ builder.selenium2.playback.recordResult({success: true});
+ }, /*error*/ function() {
+ builder.selenium2.playback.recordError(_t('sel2_eval_failed'));
+ });
}
};
builder.selenium2.playback.playStep = function() {
builder.selenium2.playback.stepStateCallback(builder.selenium2.playback, builder.selenium2.playback.script, builder.selenium2.playback.currentStep, builder.selenium2.playback.currentStepIndex(), builder.stepdisplay.state.RUNNING, null, null);
- if (builder.selenium2.playback.playbackFunctions[builder.selenium2.playback.currentStep.type.getName()]) {
- try {
- builder.selenium2.playback.playbackFunctions[builder.selenium2.playback.currentStep.type.getName()]();
- } catch (e) {
- builder.selenium2.playback.recordError(e);
+ if (builder.selenium2.playback.byPassCounter === 0){
+ if (builder.selenium2.playback.playbackFunctions[builder.selenium2.playback.currentStep.type.getName()]) {
+ try {
+ builder.selenium2.playback.playbackFunctions[builder.selenium2.playback.currentStep.type.getName()]();
+ } catch (e) {
+ builder.selenium2.playback.recordError(e);
+ }
+ } else {
+ builder.selenium2.playback.recordError(_t('sel2_step_not_implemented_for_playback', builder.selenium2.playback.currentStep.type));
}
} else {
- builder.selenium2.playback.recordError(_t('sel2_step_not_implemented_for_playback', builder.selenium2.playback.currentStep.type));
+ builder.selenium2.playback.recordResult({success: false, message: _t('sel2_bypass', builder.selenium2.playback.byPassCounter--), skip: true});
}
};
@@ -1175,6 +1386,7 @@ builder.selenium2.playback.print = function(text) {
};
builder.selenium2.playback.recordResult = function(result) {
+
if (builder.selenium2.playback.currentStep.negated) {
var msg = builder.selenium2.playback.currentStep.type.getName() + " " + _t('sel2_is') + " " + _t('sel2_' + result.success);
if (result.success && builder.selenium2.playback.currentStep.type.getName().startsWith("assert")) {
@@ -1184,13 +1396,22 @@ builder.selenium2.playback.recordResult = function(result) {
result.message = msg;
result.success = !result.success;
}
- if (result.success) {
+ if (result.skip) {
+ // Skipped steps should be updated with a distinct UI treatment
+ builder.selenium2.playback.stepStateCallback(builder.selenium2.playback, builder.selenium2.playback.script, builder.selenium2.playback.currentStep, builder.selenium2.playback.currentStepIndex(), builder.stepdisplay.state.SKIPPED, null, null);
+ } else if (result.success) {
builder.selenium2.playback.stepStateCallback(builder.selenium2.playback, builder.selenium2.playback.script, builder.selenium2.playback.currentStep, builder.selenium2.playback.currentStepIndex(), builder.stepdisplay.state.SUCCEEDED, null, null);
+ if (result.success && builder.selenium2.playback.currentStep.type.getName().startsWith("bypass")) {
+ builder.selenium2.playback.byPassCounter = builder.selenium2.playback.currentStep.nbstep;
+ }
} else {
+ // Bypass steps are not real failures, but we're setting the display to "FAILED" so it's more obvious when Se-Builder runs/skips the bypassable steps
builder.selenium2.playback.stepStateCallback(builder.selenium2.playback, builder.selenium2.playback.script, builder.selenium2.playback.currentStep, builder.selenium2.playback.currentStepIndex(), builder.stepdisplay.state.FAILED, null, result.message);
- builder.selenium2.playback.playResult.success = false;
- if (result.message) {
- builder.selenium2.playback.playResult.errormessage = result.message;
+ if (!builder.selenium2.playback.currentStep.type.getName().startsWith("bypass")) {
+ builder.selenium2.playback.playResult.success = false;
+ if (result.message) {
+ builder.selenium2.playback.playResult.errormessage = result.message;
+ }
}
}
diff --git a/seleniumbuilder/chrome/content/html/js/builder/selenium2/selenium2.js b/seleniumbuilder/chrome/content/html/js/builder/selenium2/selenium2.js
index 411c980..ac49ff8 100644
--- a/seleniumbuilder/chrome/content/html/js/builder/selenium2/selenium2.js
+++ b/seleniumbuilder/chrome/content/html/js/builder/selenium2/selenium2.js
@@ -27,6 +27,7 @@ builder.selenium2.StepType.prototype = {
getNegatable: function() {
return this.name.startsWith("waitFor") ||
this.name.startsWith("assert") ||
+ this.name.startsWith("bypass") ||
this.name.startsWith("verify");
},
/** @return The note text for this step type, if any. */
@@ -56,56 +57,69 @@ builder.selenium2.__stepData = {
"assertTextPresent": ["text"],
"verifyTextPresent": ["text"],
"waitForTextPresent": ["text"],
+ "bypassTextPresent": ["text","nbstep"],
"storeTextPresent": ["text", "variable"],
"assertBodyText": ["text"],
"verifyBodyText": ["text"],
"waitForBodyText": ["text"],
+ "bypassBodyText": ["text","nbstep"],
"storeBodyText": ["variable"],
"assertElementPresent": ["locator"],
"verifyElementPresent": ["locator"],
"waitForElementPresent": ["locator"],
+ "bypassElementPresent": ["locator","nbstep"],
"storeElementPresent": ["locator", "variable"],
"assertPageSource": ["source"],
"verifyPageSource": ["source"],
"waitForPageSource": ["source"],
+ "bypassPageSource": ["source","nbstep"],
"storePageSource": ["variable"],
"assertText": ["locator", "text"],
"verifyText": ["locator", "text"],
"waitForText": ["locator", "text"],
+ "bypassText": ["locator", "text", "nbstep"],
"storeText": ["locator", "variable"],
"assertCurrentUrl": ["url"],
"verifyCurrentUrl": ["url"],
"waitForCurrentUrl": ["url"],
+ "bypassCurrentUrl": ["url", "nbstep"],
"storeCurrentUrl": ["variable"],
"assertTitle": ["title"],
"verifyTitle": ["title"],
"waitForTitle": ["title"],
+ "bypassTitle": ["title", "nbstep"],
"storeTitle": ["variable"],
"assertElementAttribute": ["locator", "attributeName", "value"],
"verifyElementAttribute": ["locator", "attributeName", "value"],
"waitForElementAttribute": ["locator", "attributeName", "value"],
+ "bypassElementAttribute": ["locator", "attributeName", "value", "nbstep"],
"storeElementAttribute": ["locator", "attributeName", "variable"],
"assertElementStyle": ["locator", "propertyName", "value"],
"verifyElementStyle": ["locator", "propertyName", "value"],
"waitForElementStyle": ["locator", "propertyName", "value"],
+ "bypassElementStyle": ["locator", "propertyName", "value", "nbstep"],
"storeElementStyle": ["locator", "propertyName", "variable"],
"assertElementSelected": ["locator"],
"verifyElementSelected": ["locator"],
"waitForElementSelected": ["locator"],
+ "bypassElementSelected": ["locator", "nbstep"],
"storeElementSelected": ["locator", "variable"],
"assertElementValue": ["locator", "value"],
"verifyElementValue": ["locator", "value"],
"waitForElementValue": ["locator", "value"],
+ "bypassElementValue": ["locator", "value", "nbstep"],
"storeElementValue": ["locator", "variable"],
"addCookie": ["name", "value", "options"],
"deleteCookie": ["name"],
"assertCookieByName": ["name", "value"],
"verifyCookieByName": ["name", "value"],
"waitForCookieByName": ["name", "value"],
+ "bypassCookieByName": ["name", "value", "nbstep"],
"storeCookieByName": ["name", "variable"],
"assertCookiePresent": ["name"],
"verifyCookiePresent": ["name"],
"waitForCookiePresent": ["name"],
+ "bypassCookiePresent": ["name", "nbstep"],
"storeCookiePresent": ["name", "variable"],
"saveScreenshot": ["file"],
"print": ["text"],
@@ -119,10 +133,12 @@ builder.selenium2.__stepData = {
"assertAlertText": ["text"],
"verifyAlertText": ["text"],
"waitForAlertText": ["text"],
+ "bypassAlertText": ["text","nbstep"],
"storeAlertText": ["variable"],
"assertAlertPresent": [],
"verifyAlertPresent": [],
"waitForAlertPresent": [],
+ "bypassAlertPresent": ["nbstep"],
"storeAlertPresent": ["variable"],
"answerAlert": ["text"],
"acceptAlert": [],
@@ -130,8 +146,17 @@ builder.selenium2.__stepData = {
"assertEval": ["script", "value"],
"verifyEval": ["script", "value"],
"waitForEval": ["script", "value"],
+ "bypassEval": ["script", "value", "nbstep"],
"storeEval": ["script", "variable"],
- "setWindowSize": ["width", "height"]
+ "setWindowSize": ["width", "height"],
+ "printWindowName": [],
+ "renameWindow": ["name"],
+ "forceTargets": ["name"],
+ "deleteComments": [],
+ "deleteCachesUrls": [],
+ "deleteHiddenValues": []
+ //"maximizeWindow":
+ //"download":
};
builder.selenium2.__stepNotes = {
@@ -207,7 +232,7 @@ builder.selenium2.categories = [
builder.selenium2.stepTypes.assertElementPresent,
builder.selenium2.stepTypes.assertElementSelected,
builder.selenium2.stepTypes.assertElementAttribute,
- builder.selenium2.stepTypes.assertElementStyle,
+ builder.selenium2.stepTypes.assertElementStyle,
builder.selenium2.stepTypes.assertElementValue,
builder.selenium2.stepTypes.assertCookiePresent,
builder.selenium2.stepTypes.assertCookieByName,
@@ -225,7 +250,7 @@ builder.selenium2.categories = [
builder.selenium2.stepTypes.verifyElementPresent,
builder.selenium2.stepTypes.verifyElementSelected,
builder.selenium2.stepTypes.verifyElementAttribute,
- builder.selenium2.stepTypes.verifyElementStyle,
+ builder.selenium2.stepTypes.verifyElementStyle,
builder.selenium2.stepTypes.verifyElementValue,
builder.selenium2.stepTypes.verifyCookiePresent,
builder.selenium2.stepTypes.verifyCookieByName,
@@ -243,7 +268,7 @@ builder.selenium2.categories = [
builder.selenium2.stepTypes.waitForElementPresent,
builder.selenium2.stepTypes.waitForElementSelected,
builder.selenium2.stepTypes.waitForElementAttribute,
- builder.selenium2.stepTypes.waitForElementStyle,
+ builder.selenium2.stepTypes.waitForElementStyle,
builder.selenium2.stepTypes.waitForElementValue,
builder.selenium2.stepTypes.waitForCookiePresent,
builder.selenium2.stepTypes.waitForCookieByName,
@@ -251,6 +276,24 @@ builder.selenium2.categories = [
builder.selenium2.stepTypes.waitForAlertPresent,
builder.selenium2.stepTypes.waitForEval
]],
+ [_t('bypass_sel2_cat'), [
+ builder.selenium2.stepTypes.bypassCurrentUrl,
+ builder.selenium2.stepTypes.bypassTitle,
+ builder.selenium2.stepTypes.bypassText,
+ builder.selenium2.stepTypes.bypassTextPresent,
+ builder.selenium2.stepTypes.bypassBodyText,
+ builder.selenium2.stepTypes.bypassPageSource,
+ builder.selenium2.stepTypes.bypassElementPresent,
+ builder.selenium2.stepTypes.bypassElementSelected,
+ builder.selenium2.stepTypes.bypassElementAttribute,
+ builder.selenium2.stepTypes.bypassElementStyle,
+ builder.selenium2.stepTypes.bypassElementValue,
+ builder.selenium2.stepTypes.bypassCookiePresent,
+ builder.selenium2.stepTypes.bypassCookieByName,
+ builder.selenium2.stepTypes.bypassAlertText,
+ builder.selenium2.stepTypes.bypassAlertPresent,
+ builder.selenium2.stepTypes.bypassEval
+ ]],
[_t('store_sel2_cat'), [
builder.selenium2.stepTypes.store,
builder.selenium2.stepTypes.storeCurrentUrl,
@@ -261,13 +304,21 @@ builder.selenium2.categories = [
builder.selenium2.stepTypes.storePageSource,
builder.selenium2.stepTypes.storeElementSelected,
builder.selenium2.stepTypes.storeElementAttribute,
- builder.selenium2.stepTypes.storeElementStyle,
+ builder.selenium2.stepTypes.storeElementStyle,
builder.selenium2.stepTypes.storeElementValue,
builder.selenium2.stepTypes.storeCookiePresent,
builder.selenium2.stepTypes.storeCookieByName,
builder.selenium2.stepTypes.storeAlertText,
builder.selenium2.stepTypes.storeAlertPresent,
builder.selenium2.stepTypes.storeEval
+ ]],
+ [_t('bookmarklet_sel2_cat'), [
+ builder.selenium2.stepTypes.printWindowName,
+ builder.selenium2.stepTypes.renameWindow,
+ builder.selenium2.stepTypes.forceTargets,
+ builder.selenium2.stepTypes.deleteComments,
+ builder.selenium2.stepTypes.deleteCachesUrls,
+ builder.selenium2.stepTypes.deleteHiddenValues
]]
];
diff --git a/seleniumbuilder/chrome/content/html/js/builder/stepdisplay.js b/seleniumbuilder/chrome/content/html/js/builder/stepdisplay.js
index 8a9e51c..e9bf74d 100644
--- a/seleniumbuilder/chrome/content/html/js/builder/stepdisplay.js
+++ b/seleniumbuilder/chrome/content/html/js/builder/stepdisplay.js
@@ -8,6 +8,7 @@ builder.stepdisplay.state.SUCCEEDED = 2;
builder.stepdisplay.state.FAILED = 3;
builder.stepdisplay.state.ERROR = 4;
builder.stepdisplay.state.BREAKPOINT = 5;
+builder.stepdisplay.state.SKIPPED = 6;
builder.stepdisplay.stateColors = {};
builder.stepdisplay.stateColors[builder.stepdisplay.state.NORMAL] = 'white';
@@ -16,6 +17,7 @@ builder.stepdisplay.stateColors[builder.stepdisplay.state.SUCCEEDED] = '#bfee85'
builder.stepdisplay.stateColors[builder.stepdisplay.state.FAILED] = '#ffcccc';
builder.stepdisplay.stateColors[builder.stepdisplay.state.ERROR] = '#ff3333';
builder.stepdisplay.stateColors[builder.stepdisplay.state.BREAKPOINT] = '#e0d5e9';
+builder.stepdisplay.stateColors[builder.stepdisplay.state.SKIPPED] = '#ffc048';
builder.registerPostLoadHook(function() {
jQuery('#suite-saverequired').text(_t('suite_has_unsaved_changes'));
@@ -465,7 +467,7 @@ function mkUpdate(stepID, newType) {
}
function baseTypeName(type) {
- return type.getName().replace(/^(store|assert|verify|waitFor)/, "");
+ return type.getName().replace(/^(store|assert|verify|bypass|waitFor)/, "");
}
function mkCatUpdate(stepID, newCat) {