Selenium IDE

The Selenium IDE is an "Open source record and playback test automation for the web". Extension in the browser for recording, and there's a selenium-side-runner script to run the scripts locally against various browsers.

Library

Learnings

Flow Control

Holy cats, Selenium has flow control now? If-else-end? Goto? Do/While? AWESOME.

Matching via RegExp

There's no current capability to check for Regular Expressions built into the app.

Case: Looking for Your receipt number is ADFSADSf1341234 and you receipt will be emailed to you shortly.

Option 1: verifyElementPresent + xPath

 1{
 2    "id": "6a13fc8d-a354-4464-90d2-5a0f9ec35452",
 3    "comment": "",
 4    "command": "verifyElementPresent",
 5    "target": "xpath=//div/div/*[contains(.,'Your receipt number is')]",
 6    "targets": [],
 7    "value": ""
 8}, {
 9    "id": "6a13fc8d-a354-4464-90d2-5a0f9ec35453",
10    "comment": "",
11    "command": "verifyElementPresent",
12    "target": "xpath=//div/div/*[contains(.,'and your receipt will be emailed to you shortly')]",
13    "targets": [],
14    "value": ""
15}

Verdict: Finds sections of pure text. No real regexp matching.

Option 2: ExecuteScript

 1{
 2    "id": "8d114026-f2b6-4d53-81e4-5eff16051bd6",
 3    "comment": "",
 4    "command": "if",
 5    "target": "document.evaluate(\"//div/div/div/p[contains(., 'Your receipt number is')]\", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.innerText.match(/Your receipt number is [a-zA-Z0-9]+ and your receipt will be emailed to you shortly/) == null",
 6    "targets": [],
 7    "value": ""
 8}, {
 9    "id": "ccddf9c7-2045-472f-abac-553d8c92bb1c",
10    "comment": "",
11    "command": "throwError",
12    "target": "Nope",
13    "targets": [],
14    "value": ""
15}, {
16    "id": "aaa85efd-8010-4e7f-8fa6-0aa52db6bf8b",
17    "comment": "",
18    "command": "end",
19    "target": "",
20    "targets": [],
21    "value": ""
22}

Verdict: This does true Regex matching, but you need to be sure the XPath will hit exactly the right node to RegExp (ie. you're not finding a node that matches a RegExp, you're finding a node then verifying it matches a regexp).