I've raised these issues to Appian in a support email, and no response was returned, and I have not seen any improvement in the problem in the year since. I've spotted two major issues with the Appian automation framework, which are just lousy coding and must be resolved.
Problem 1: The Tear Down Method
Currently Appian introduces the teardown method as a step in your feature file. This is a problem for two reasons.
1. Ending the test execution early will never reach the teardown method.
2. A test that fails before it reaches the teardown method will not be adequately torn down.
Impact:
When you do not tear down the Chrome or Ghecko driver, you have two major issues, one minor annoyance and the other more significant. First, the browser will not close. If you run the test ten times, you will have ten browsers open. This alone may not be a big deal since you can close them, but the bigger problem is that the Chrome driver instance will still be alive in your processes and slowly eat away at your memory. Imagine running a test twenty times and ending the execution early. You will have twenty drivers running in your PC or Mac processes. Unless you know what you're looking for, many people will have no idea about this, and their PC or Mac will go slower until it must be restarted.
Solution:
This is the same solution I implemented on my own, which I have provided to Appian previously. The teardown method should be called a Junit @AfterClass method so that it runs at the end of your test regardless of whether it passes or fails. Now there is one exception to this rule - if you use the examples section in your feature file, you do not want to use this solution and will just have to be sure to kill the background process.
@AfterClasspublic static void tearDown() throws IOException { fixture.tearDown();
public void clickOnAction(String actionName) { TempoAction.getInstance(this.settings).waitFor(new String[]{actionName}); TempoAction.getInstance(this.settings).click(new String[]{actionName});}
.click(new String[]{actionName});
.waitFor(new String[]{actionName});
public void clickOnAction(String actionName) { TempoAction.getInstance(this.settings).waitFor(actionName); TempoAction.getInstance(this.settings).click(actionName);}
Discussion posts and replies are publicly visible