JBehave - невозможно иметь несколько результатов в истории? - PullRequest
0 голосов
/ 17 октября 2018

Разве невозможно иметь в истории как SUCCCESS, так и FAILURE Outcome?

Lifecycle:
After:
Outcome: FAILURE 
Given I capture page screenshot
Given I close browser
Outcome: SUCCESS
Given I close browser

Scenario: Sample one
Given I open browser
When I do something

Scenario: Sample two
Given I open browser
When I do another thing

Например, для сбоев я хочу сделать скриншот перед закрытием браузера.В случае успеха я просто хочу закрыть браузер.

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

1 Ответ

0 голосов
/ 24 октября 2018

Цитирование OP:

Например, для сбоев я хочу сделать скриншот перед закрытием браузера.В случае успеха я просто хочу закрыть браузер.

Теперь интересным вопросом будет, какой фреймворк вы используете для своих утверждений?Я предполагаю, что вы используете Junit, поставляемый в комплекте с JBehave, так как JBehave полагается на то, что существует ошибка, вызванная исключением JUnit.

Идея состоит в том, чтобы: a) вызвать исключение при возникновении ошибки (поэтому необходимо проверять каждый шаг) b) сделать снимок экрана c) продолжить тестирование (т.е. закрыть браузер)

Таким образом, чтобы создать исключение, вам действительно не нужно ничего делать, поскольку это делается автоматически при использовании оператора Assert в JUnit.

, например,

Assert(username.equals("expected_user").isTrue();

Если вышеприведенное не удаетсяисключение будет брошено.Вы можете сделать это следующим образом:

public class RunnerExtension implements AfterTestExecutionCallback {

    @Override
    public void afterTestExecution(ExtensionContext context) throws Exception {
        Boolean testResult = context.getExecutionException().isPresent();
        System.out.println(testResult); //false - SUCCESS, true - FAILED
    }
}

@ExtendWith(RunnerExtension.class)
public abstract class Tests {

}

Получено из этого ответа: JUnit5 - Как получить результат теста в AfterTestExecutionCallback

Таким образом, в основном вы переопределяете стандартное поведение -после - каждое утверждение было выполнено.В приведенном выше случае вы можете добавить (когда выдается исключение -> сделать снимок экрана).

Вот код снимка экрана для Selenium-Java:

WebDriver driver = new FirefoxDriver();
driver.get("http://www.google.com/");
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
// Now you can do whatever you need to do with it, for example copy somewhere
FileUtils.copyFile(scrFile, new File("c:\\tmp\\screenshot.png"));

Надеюсь, что вышепомогает!

...