Скриншоты Java с огурцом

Есть ли способ делать снимки экрана между шагами в Java Cucumber?

У меня есть следующий сценарий:

@Scenario_1
Given I log into url
And I see the home page is displayed in English //Take screenshot
And I click on 'Edit Profile'
And I see the language set to 'English' 
When I change the language to Chinese   //Take screenshot
And I navigate to home page
Then everything is displayed in Chinese //Take screenshot

Я хочу сделать скриншоты для определенных шагов сценария.

В настоящее время я делаю снимок экрана методом «После».

@After()
public void execute_after_every_scenario(Scenario s) throws InterruptedException
{
    Thread.sleep(2000);

    final byte[] screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES);
    s.embed(screenshot, "image/png");

    driver.quit();
}

Как и ожидалось, это захват изображения только для последнего шага.

Как я могу захватить изображения для двух других шагов и вставить изображение так же, как в методе «После»?

Я попытался создать новый метод для создания скриншотов и вызова этого метода при необходимости. Но может ли любой другой метод, кроме указанного в «После», принимать сценарий в качестве аргумента?

take_screenshot(Scenario_1, driver);

public void take_screenshot(Scenario s,WebDriver driver)
{
    final byte[] screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES);
    s.embed(screenshot, "image/png");
}

Как я могу это сделать?


person sanaku    schedule 25.03.2016    source источник


Ответы (2)


Шаг создания скриншота. Может быть, что-то вроде этого:

public class YourStepDefinitions {

    private Scenario myScenario;

    @Before()
    public void embedScreenshotStep(Scenario scenario) {

        myScenario = scenario;

    }

    @Then ("^I take a screenshot$")
    public void i_take_a_screenshot() throws Throwable {

        try {
            myScenario.write("Current Page URL is " + driver.getCurrentUrl());
            byte[] screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.BYTES);
            myScenario.embed(screenshot, "image/png");  // Stick it in the report
        } catch (WebDriverException somePlatformsDontSupportScreenshots) {
            log.error(somePlatformsDontSupportScreenshots.getMessage());
        } catch (ClassCastException cce) {
            cce.printStackTrace();
        }
    }
}
person MikeJRamsey56    schedule 25.03.2016
comment
Именно то, что мне было нужно. Спасибо ! - person sanaku; 01.04.2016

Вы можете использовать отчет об объеме:

Extent reports are more customizable than others.
Extent API can produce more interactive reports, a dashboard view, graphical view,         
capture screenshots at every test step, and emailable reports.
It can be easily integrated with frameworks like JUnit & TestNG.
person Kiran Yadav    schedule 13.02.2020