Cool. I was wondering what those references to Playwright were. A couple of questions:
Does this bring any performance improvements? Does this make UI testing easier? > On Aug 2, 2022, at 8:50 PM, Josh Tynjala <joshtynj...@bowlerhat.dev> wrote: > > Hey all, > > Recently, I committed some changes to the RoyaleUnit Ant task to make it > more robust and powerful. This is in response to my recent discovery that > the RoyaleUnit testing in our royale-asjs build seems to have become less > reliable over time since I originally set things up. > > In particular, I found that Chrome was failing on certain tests because of > security restrictions with file:/// URLs (I guess that Chrome was either > not as strict in the past, or we have added newer tests that are accessing > restricted APIs that we weren't using in the past). Additionally, I was > seeing the occasional intermittent communication failure in Firefox, for no > obvious reason. > > To remedy this situation, I've integrated Playwright into the RoyaleUnit > Ant task. > > https://playwright.dev > > If you're not aware, Playwright is a library that enables automated testing > in Chromium, Firefox, and Webkit. Playwright works on macOS, Linux, and > Windows, and it has a powerful programmatic API (available for a number of > languages... we're using the Java version). > > By using Playwright, we get some interesting enhancements to our JS testing: > > - Headless > - No browser windows popping up during long builds > - Doesn't use your installed browsers > - Won't litter your default browser with a bunch of tabs that don't > auto-close > - No risk of being affected by customized extensions/add-ons > - It automatically sets up the correct security sandbox > - No arcane combinations of command line arguments or about:config > tweaks to get file:/// URLs working as we need > - The browser debugging console (trace/console.log) messages appear in > the terminal output of the build > - Easier to see what went wrong if an exception is thrown during tests > > The "player" attribute of the <royaleunit/> task may now be set to > "chromium", "firefox", or "webkit" to use a specific browser. RoyaleUnit > will keep supporting the "html" value for backwards compatibility, and > it's now an alias for "chromium". You can also use "html" when you want to > use a custom browser executable instead of Playwright. > > Example of <royaleunit/> in an Ant script that runs JS tests in > WebKit/Safari: > > <royaleunit > player="webkit" > swf="${basedir}/target/bin/js-release/index.html"/> > >> Aside: Yes, the attribute name for the file/URL is still "swf". That's a > legacy from FlexUnit. We could add an alias, but it hasn't been a priority. > > I have updated the royale-asjs build to use Playwright, instead of trying > to detect which browsers are installed locally. > > That's not the only change to the RoyaleUnit Ant task that I've made > recently, though. > > First, I should specify it's still possible to specify a custom > royaleunit.browser property in your env.properties file for the royale-asjs > Ant build. If you have that set up already, you don't need to change > anything. It should keep working the same as before, and your build won't > use Playwright when royaleunit.browser is defined. However, if you would > like to switch to Playwright for local builds, you can just comment out or > remove the royaleunit.browser property customization from your > env.properties file (or from the -Droyaleunit.browser command line > arguments, or any other place you might have set it). > > If you'd like to keep using a custom browser, you may be interested to know > that the RoyaleUnit Ant task now supports custom arguments when you specify > an executable command. Example below: > > <royaleunit > player="html" > swf="${basedir}/target/bin/js-release/index.html" > command="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" > commandArgs="--no-sandbox --user-data-dir=custom_chrome_profile > --no-first-run"/> > >> Aside: The commandArgs above should work well to get tests to pass in > Chrome with file:/// URLs, even without Playwright. Other browsers may > require different commandArgs. > > I updated the royale-asjs build to optionally support both the > royaleunit.browser property along with a new royaleunit.browser.args > property, which you can specify in env.properties, if you prefer not to > rely on Playwright. Example below (on macOS): > > # in env.properties > royaleunit.browser=/Applications/Google Chrome.app/Contents/MacOS/Google > Chrome > royaleunit.browser.args=--no-sandbox > --user-data-dir=/Users/joshtynjala/Development/apache/royaleunit_chrome_profile > --no-first-run > > Please let me know if anything seems broken. I've confirmed that Playwright > tests are working on CI builds. It's also working on both my local macOS > and Windows machines. > > -- > Josh Tynjala > Bowler Hat LLC <https://bowlerhat.dev>