Qlik Sense

Automate Safari browser using macOS Script Editor

Using AppleScript the Safari browser can be remote controlled, automatically logging several users into Qlik Sense.

Automate Safari browser using macOS Script Editor
Photo by Brett Jordan / Unsplash

During recent work on the open source Ctrl-Q tool for Qlik Sense I needed to log in as several users simultaneously.

Four users logged into Sense in their own incognito/private browser windows seemed like an easy solution.

This can of course be done manually, but that quickly becomes rather time-consuming and boring. Better to automate it.

There are various tools available for browser automation, Selenium IDE comes to mind.
Seemed like overkill though and it turns out that good old AppleScript does this quite nicely.

Automatically log four users into Qlik Sense, using macOS' AppleScript.

The code snippet below works in the standard macOS Script Editor app, just replace URL, userid and password as needed. If needed also adjust the position of each window.

-- Get display size
tell application "Finder"
	--gets the coords of the desktop
	set screenSize to bounds of window of desktop
end tell

-- display dialog "Display size: " & (item 1 of screenSize) & ", " & (item 2 of screenSize) & ", " & (item 3 of screenSize) & ", " & (item 4 of screenSize)

--
-- testuser_1
tell application "Safari"
	activate
	tell application "System Events"
		click menu item "New Private Window" of ¬
			menu "File" of menu bar 1 of ¬
			application process "Safari"
	end tell
	
	-- The frontmost window is the private Browsing window that just got opened 
	-- change the URL to the one we want to open.
	set URL of document 1 to "https://qliksense.ptarmiganlabs.net"
	set bounds of window 1 to {0, 0, (item 3 of screenSize) / 2, (item 4 of screenSize) / 2}
end tell

if page_loaded(10) then
	tell application "System Events"
		keystroke "LAB\\testuser_1"
		delay 1
		keystroke tab
		keystroke "user_1_secret_pwd"
		keystroke return
	end tell
else
	display alert "The URL Has Not Loaded."
end if

--
-- testuser_2
tell application "Safari"
	activate
	tell application "System Events"
		click menu item "New Private Window" of ¬
			menu "File" of menu bar 1 of ¬
			application process "Safari"
	end tell
	
	set URL of document 1 to "https://qliksense.ptarmiganlabs.net"
	set bounds of window 1 to {(item 3 of screenSize) / 2, 0, (item 3 of screenSize), (item 4 of screenSize) / 2}
end tell

if page_loaded(10) then
	tell application "System Events"
		keystroke "LAB\\testuser_2"
		delay 1
		keystroke tab
		keystroke "user_2_secret_pwd"
		keystroke return
	end tell
else
	display alert "The URL Has Not Loaded."
end if

--
-- testuser_3
tell application "Safari"
	activate
	tell application "System Events"
		click menu item "New Private Window" of ¬
			menu "File" of menu bar 1 of ¬
			application process "Safari"
	end tell
	
	set URL of document 1 to "https://qliksense.ptarmiganlabs.net"
	set bounds of window 1 to {0, 550, (item 3 of screenSize) / 2, 1100}
end tell

if page_loaded(10) then
	tell application "System Events"
		keystroke "LAB\\testuser_3"
		delay 1
		keystroke tab
		keystroke "user_3_secret_pwd"
		keystroke return
	end tell
else
	display alert "The URL Has Not Loaded."
end if

--
-- testuser_4
tell application "Safari"
	activate
	tell application "System Events"
		click menu item "New Private Window" of ¬
			menu "File" of menu bar 1 of ¬
			application process "Safari"
	end tell
	
	set URL of document 1 to "https://qliksense.ptarmiganlabs.net"
	set bounds of window 1 to {(item 3 of screenSize) / 2, 550, (item 3 of screenSize), 1100}
end tell

if page_loaded(10) then
	tell application "System Events"
		keystroke "LAB\\testuser_4"
		delay 1
		keystroke tab
		keystroke "user_4_secret_pwd"
		keystroke return
	end tell
else
	display alert "The URL Has Not Loaded."
end if




--
on page_loaded(timeout_value)
	delay 1
	repeat with i from 1 to the timeout_value
		tell application "Safari"
			if (do JavaScript "document.readyState" in document 1) is "complete" then
				return true
			else if i is the timeout_value then
				return false
			end if
			delay 1
		end tell
	end repeat
end page_loaded
Göran Sander Stockholm, Sweden

Qlik Sense consultant and toolmaker at Ptarmigan Labs. Ten years at Spotify, Qlik Luminary and Partner Ambassador, author of the open source Butler tools.

All posts by Göran Sander
Keep reading

More about

Qlik Sense

Know thy Qlik Sense repository database

Two open source PowerShell scripts for read-only analysis of the Qlik Sense client-managed repository db — table sizes, health metrics, user and group membership insights, and group bloat detection. This helps optimizing the repo db and improve performance in the Qlik Sense environment.

7 min read