Объединить @TestTemplate с @ParameterizedTest? - PullRequest
0 голосов
/ 26 октября 2018

Как мы можем использовать Selenium-Jupiter's @TestTemplate (чтобы он работал в разных браузерах: https://bonigarcia.github.io/selenium-jupiter/#template-tests), чтобы объединить его с @ParameterizedTest (для тестирования, управляемого данными, например, попробовать разные учетные данные, определенные в источнике, на странице входа)?

Я не смог понять это. Вместо возможности использовать Selenium-Jupiter's @TestTemplate для программной настройки сценария браузера (seleniumExtension.addBrowsers и с Webdriver в качестве типа параметра метода templateTest), где метод будет выполняться дважды (один с использованием Chrome, а второй с использованием Firefox), я могу заставить его работать только двумя @ParameterizedTest методами:

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.aggregator.ArgumentsAccessor;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.extension.RegisterExtension;

import static org.junit.jupiter.params.provider.Arguments.arguments;

import io.github.bonigarcia.SeleniumExtension;

public class TestDDTparamNoTestTemplate {
    @RegisterExtension
    static SeleniumExtension seleniumExtension = new SeleniumExtension();

    @BeforeAll
    static void setup() {
        //to stop geckodriver logging: (this is for firefox, not for firefoxInDocker)
        System.setProperty(FirefoxDriver.SystemProperty.BROWSER_LOGFILE,"/dev/null");
    }

    //methodsource with factory method that must generate a stream of arguments:
    static Stream<Arguments> purposeEmailPasswordNameProvider() {
        return Stream.of(
                arguments("Login works", "alexsiminiuc3@gmail.com", "Password123!", "Alex"),
                arguments("Incorrect email", "alexsiminiuc2@gmail.com", "Password123!", "Alex"),
                arguments("Invalid email", "alexsiminiuc", "Password123!", "Alex")
        );
    }

    //CHROME
    @ParameterizedTest
    @MethodSource("purposeEmailPasswordNameProvider")          // I could also use a @CsvSource or a @CsvFileSource
    void testArgumentAggregMethodSourceChrome(ArgumentsAccessor arguments,ChromeDriver driver) {
        String purpose = arguments.getString(0);
        System.out.println("purpose is: " + purpose);
        User user = new User(arguments.getString(1),
                arguments.getString(2),
                arguments.getString(3));

        testCASE(driver, user, purpose);
    }

    //FIREFOX
    @ParameterizedTest
    @MethodSource("purposeEmailPasswordNameProvider")  
    void testArgumentAggregMethodSourceFirefox(ArgumentsAccessor arguments,FirefoxDriver driver) {
        String purpose = arguments.getString(0);
        System.out.println("purpose is: " + purpose);
        User user = new User(arguments.getString(1),
                arguments.getString(2),
                arguments.getString(3));

        testCASE(driver, user, purpose);
    }

    void testCASE(WebDriver driver, User user, String purpose){
        HomePage homePage = new HomePage(driver);
        homePage.open();
        if (purpose.equals("Login works")) {
        etc.

1 Ответ

0 голосов
/ 24 января 2019

Я думаю, @TestTemplate и @ParameterizedTest не могут быть объединены в JUnit 5. Поэтому его также нельзя использовать в Селен-Юпитере.

...