gpt4 book ai didi

java - 将@TestTemplate 与@ParameterizedTest 结合起来?

转载 作者:太空宇宙 更新时间:2023-11-04 10:05:21 25 4
gpt4 key购买 nike

我们如何使用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.

最佳答案

我认为@TestTemplate@ParameterizedTest不能在JUnit 5中组合。因此,它也不能在Selenium-Jupiter中使用。

关于java - 将@TestTemplate 与@ParameterizedTest 结合起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53005926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com