Веб-драйвер Selenium для Chrome не сохраняет скриншоты по указанному пути

public void afterTestMethod(TestContext testContext) throws Exception {
    if (testContext.getTestException() == null) {
        return;
    }
    File screenshot = ((TakesScreenshot) webDriver).getScreenshotAs(OutputType.FILE);
    String testName = testContext.getTestClass().getSimpleName();
    String methodName = testContext.getTestMethod().getName();
    Files.copy(screenshot.toPath(),
    Paths.get("C:\\Users\\user\\git\\ufe-360\\UFE-TESTS\\screenshots\test.png", testName + "_" + methodName + "_" + screenshot.getName())); 
    } 
}

У меня есть код выше в моем проекте, чтобы сделать скриншоты после выполнения теста. Я подозреваю, что что-то отсутствует в моем коде. При каждом тестировании скриншоты не сохраняются по указанному пути. У меня нет ошибок. Каждый тест выполняется правильно, но без скриншота.

2 ответа

import java.io.File;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.OutputType;


        private static void takeScreenshot() throws IOException, InterruptedException {
            // TODO Auto-generated method stub

            System.setProperty("webdriver.chrome.driver", "chromedriver");              
            driver = new ChromeDriver();

            driver.get("https://www.google.com/");
            Thread.sleep(2);

            TakesScreenshot scrShot =((TakesScreenshot)driver);
            File SrcFile=scrShot.getScreenshotAs(OutputType.FILE);
            File DestFile=new File("/home/XXXX/Desktop/test.png");
            FileUtils.copyFile(SrcFile, DestFile);      

        }   

Приведенный выше код откроет "google.com", он сделает снимок экрана и сохранит его на рабочем столе, так как я указал путь к нему.

В начале вашего метода у вас есть код, который не позволит сделать снимок экрана, когда в тесте нет ошибок / исключений. Итак, вы говорите: "Каждый тест выполняется правильно, но без скриншота". и это вполне ожидаемо. из вопроса:

if (testContext.getTestException() == null) {
    return;
}

из вашего дополнительного комментария

if (ITestResult.FAILURE == result.getStatus()) {

Ваша логика выглядит так: если тест не пройден, сделайте скриншот в момент сбоя. Попробуйте изменить код вашего теста, чтобы он не сработал, и вы должны увидеть скриншоты по указанному пути. Если вы хотите реализовать какую-то другую логику, например, "делать снимок экрана на каждом этапе тестирования", пожалуйста, исправьте вопрос, так как он будет иметь другое решение.

Если вы просто удалите if Логика вашего кода сделает скриншот после последнего шага вашего теста. (но я не уверен, что такой скриншот очень полезен, так как обычно скриншоты используются, чтобы помочь проанализировать "что пошло не так", и ваша логика прекрасно это охватывает)

Другие вопросы по тегам