756582322f8a53fef19e8c24ba902e353ba3623f
chmalee
  Thu Aug 27 14:38:34 2026 -0700
uiTest: shared browser UI test harness, plus an hgTracks example, refs #38188

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

diff --git src/hg/utils/uiTest/sample.hg.uiTest.conf src/hg/utils/uiTest/sample.hg.uiTest.conf
new file mode 100644
index 00000000000..ffda8717a5e
--- /dev/null
+++ src/hg/utils/uiTest/sample.hg.uiTest.conf
@@ -0,0 +1,58 @@
+# Sample ~/.hg.uiTest.conf for the browser UI tests.
+#
+#     cp sample.hg.uiTest.conf ~/.hg.uiTest.conf
+#     chmod 600 ~/.hg.uiTest.conf
+#
+# This file is OPTIONAL. With no conf file at all, uiTest runs against
+# genome-test and skips anything that needs a login or the database. You need
+# one when you want to point at your own sandbox, or to log in.
+#
+# Same format as ~/.hg.conf: name=value, "#" comments, "include <file>" and
+# "delete <var>". It must be mode 600 -- a file whose name starts with "." and
+# that allows group or other access is rejected before anything runs, the same
+# rule hgConfig.c applies to ~/.hg.conf.
+#
+# It is a SEPARATE file from ~/.hg.conf on purpose. That one is read by every CGI
+# and by hgsql, and test credentials do not belong in that blast radius.
+
+# Shared targets can live in a group file, so each person keeps only credentials.
+# include /hive/groups/browser/uiTest/targets.conf
+
+default.target  = hgwdev-yourUserName
+default.account = qa
+
+# rr, genome-test, hgwdev, hgwbeta and hgwdev-<user> are compiled in, so they
+# need no line here. A target.<name> line adds one, or overrides a compiled one.
+# These three are the docker QA instances on hgwdev. beta only exists between
+# do_final and do_wrapup, so it is normally down, and that is correct.
+target.tip  = http://127.0.0.1:8081/cgi-bin
+target.beta = http://127.0.0.1:8082/cgi-bin
+target.rel  = http://127.0.0.1:8083/cgi-bin
+
+# ONE hgLogin ACCOUNT PER PERSON, named <user>Qa. Make yourself one on hgwdev and
+# put it here. This is a safety property rather than a preference: a run logs in
+# as you, and a hub or a session belongs to whoever's account made it, so a run
+# of yours can never reach a hub or a session somebody else was in the middle of.
+account.qa.user        = yourUserNameQa
+account.qa.passwordCmd = pass show ucsc/yourUserNameQa
+# account.qa.password  = ...      # or this, if you have nowhere better to put it
+
+# Credentials never go to production. rr defaults to no account whatever
+# default.account says, so this line is belt and braces.
+target.rr.account = (none)
+
+# What this machine is allowed to do. A test that declares needs.hgsql or
+# needs.write is SKIPPED, not failed, when the machine cannot oblige -- a
+# developer with no QA password must never see a red run.
+can.hgsql = yes
+can.write = yes
+
+# Where a run leaves its results.json, screenshots and traces.
+artifacts = ~/uiTest
+
+# How long any single wait may take, in milliseconds.
+timeout.default = 30000
+
+# Playwright lives at /hive/groups/browser/uiTest/pw. Set this only if you keep a
+# private copy somewhere else.
+# pw.prefix = ~/.uiTestPw