Supercharge SFDX with Ui-licious
You drank the Coolaid and you are all in and really love your Scratch Orgs. Just a few things drive you crazy.
When the API doesn't expose a setting
Your application is querying the OutOfOffice objects. Unfortunately they only exist when the Chatter settings have enabled them. To my best knowledge there is no API or config setting to achieve that from the command line. So automated testing in a scratch org won't work.
Ui-licious to the rescue
Ui-licious is a UI testing service that uses JavaScript as its scripting language. This makes an easy read and edit. A script that can set the missing OOO setting is short and simple (if you agree iFrames are easy to handle). You can (almost) read it out aloud:
// URL Provided by data object from the command line
I.goTo(DATA.result.url);
I.must.see("Chatter Settings");
// To ensure we work on the iFrame we get the id
let iframeId = UI.execute("return document.getElementsByTagName('iframe')[0].getAttribute('id')");
// The iFrame loads slowly
I.wait(10);
UI.context("#" + iframeId, () => {
I.see("Chatter is a corporate network that lets your users work together, talk to each other, and share information, all in real time.");
I.click("Edit");
I.must.see("Save");
I.select("Users can set Out of Office messages");
I.click("Save");
})
The interesting piece in the above is DATA.result.url
which is an JSON object that needs to be handed over to the Ui-licious. A small command script in tandem with SFDX does the trick. The beauty here: we directly can reuse the output of an sfdx command as input for the uilicious-cli
.
sfdx force:org:open -r -p lightning/setup/CollaborationSettings/home --json > local.json
uilicious-cli run "ProjectName" "ScriptName" --dataFile local.json -u uiliciousUser -p uiliciousPassword
It probably would be part of a larger CI script, but you get the idea! You might not store the output in a file, but use bash to capture it in memory and use --dataObject
instead. Full details are in the documentation.
As usual YMMV
Posted by Stephan H Wissel on 27 November 2018 | Comments (1) | categories: Lightning Salesforce