Selenium is the technology which the browser manufacturers have agreed to support. So Selenium itself is not usually the choice. (the only exception are UI 'diff' tools which are generally in their infancy).
So really the choice is:
You do the programming
You use a vendor who provides an interface on top of selenium that you find easier to use. See the ...
Found the culprit.
This is not enough: fun defaultBrowserAppList() = mDevice.findObject((UiSelector().text("Browser app")). For some reason it doesn't match the text.
Should be replaced with UiSelector().textContains("Browser app") and then it works.
Same for: mDevice.findObject(UiSelector().text("Firefox Preview"))
You can use Katalon Studio, it provides both record & playback feature along with scripting capabilities.
It has a gentle learning curve with a pre-configured framework and support for cross-browser testing and what you are trying to achieve can be done in a couple of days only. You can learn about it here - Katalon Studio Tutorial
There are many tools available the best one is katalon if you don't want to write long code, you can just record the script and play it as well as you can code if you want to.
here are some reference link where you can find many other options also.
Adding to @Michael Durrant's very good answer.
If you are looking for a quick win, I have come up with an idea for converting selenium tests to API tests. This will only work for cases in which you have "UI" tests that have nothing to do with UI logic and are only used to test backend logic.
The idea is to capture the network traffic when running a ...