Не думаю, что эта ошибка как-то связана со способом запуска тестов. Взможно, у вас на странице много AJAXа? Эта ошибка может появиться, когда найденный ранее элемент был изменен каким-либо образом. Попробуйте непосредственно перед обращением к элементу делать его повторный поиск. Например, в методе MainPage#search (строка 32), что-то типа такого: driver.findElement(By.вашЛокатор).click()
Да, еще попробуйте driver в ThreadLocal обернуть.
private static ThreadLocal<WebDriver> driver = new ThreadLocal<>();
...
public static WebDriver getDriver() {
return driver.get();
}
public static void setUp(String browserName) throws MalformedURLException {
...
if () {
driver.set(new RemoteWebDriver(...));
....
getDriver().manage().timeouts()...;
getDriver().manage().window()...;
}
Таким образом, каждый тест будет создавать себе свой драйвер, для своего потока.
Предположу что проблема все же в параллельности тестов: проверьте все ли у вас синхронно, нет ли какого то общего ресурса, как тесты получают драйвер и так далее, возможно где то они забирают друг у друга инфу или управление.
Ну и со стейлом можно побороться например вот так Непобедимый дракон? Как забыть о StaleElement Exception — testers little helper