Сорри, а у вас случаем в трех методах не одно и то же onTestFailure, onTestSuccess, onTestSkipped ?
Вы передаете ITestResult result, но не проверяете его - скриншоты будут при любом результате
Ми використовуємо Selenide. WebDriver - це один із його класів, при визові getWebDriver() він повертає інстанс актуального драйвера для потоку в якому він працює, можете подивитись в “нутрях” що там і до чого, aле можна написати і свій aka WebDriverManager який все те саме робить привязує драйвери до threads ну і прочі штуки робить, щоб уникнути використання Selenide.
Виглядає приблизно так: