我在通过TestContainers运行@ParameterizedTest时遇到了问题。@Test通过TestContainers运行,但一旦我更改为@ParameterizedTest,就会开始在本地Сhrome实例上运行所有东西。在TestContainers的文档中,我没有找到关于@ParameterizedTest的一些信息。
这是行之有效的:
import com.codeborne.selenide.WebDriverRunner;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testcontainers.containers.BrowserWebDriverContainer;
import static com.codeborne.selenide.Condition.visible;
import static com.codeborne.selenide.Selenide.*;
import static conf.Configuration.BASE_URL;
public class Test {
private final SelenideElement errorAuth = $(By.xpath(ErrorNotifications.ERROR_AUTH));
@Rule
public BrowserWebDriverContainer chrome =
new BrowserWebDriverContainer()
.withCapabilities(new ChromeOptions());
@Before
public void setUp() {
RemoteWebDriver driver = chrome.getWebDriver();
WebDriverRunner.setWebDriver(driver);
}
@After
public void tearDown() {
WebDriverRunner.closeWebDriver();
}
@org.junit.Test
public void search() {
open(BASE_URL);
new StartPage()
.clickEnterButton()
.enterLogin("var1")
.enterPassword("password")
.clickEnterButton();
errorAuth.shouldBe(visible);
sleep(1000);
}
}
这不管用:
import com.codeborne.selenide.WebDriverRunner;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testcontainers.containers.BrowserWebDriverContainer;
import static com.codeborne.selenide.Condition.visible;
import static com.codeborne.selenide.Selenide.*;
import static conf.Configuration.BASE_URL;
public class Test {
private final SelenideElement errorAuth = $(By.xpath(ErrorNotifications.ERROR_AUTH));
@Rule
public BrowserWebDriverContainer chrome =
new BrowserWebDriverContainer()
.withCapabilities(new ChromeOptions());
@Before
public void setUp() {
RemoteWebDriver driver = chrome.getWebDriver();
WebDriverRunner.setWebDriver(driver);
}
@After
public void tearDown() {
WebDriverRunner.closeWebDriver();
}
@ParameterizedTest
@CsvSource({"var1, var1", "var2, var2", "null, null"})
public void search(String email, String password) {
open(BASE_URL);
new StartPage()
.clickEnterButton()
.enterLogin(email)
.enterPassword(password)
.clickEnterButton();
errorAuth.shouldBe(visible);
sleep(1000);
}
}
发布于 2022-06-24 07:30:13
您正在混合JUnit4和JUnit5注释:
// These are JUnit 4 classes
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
// These are JUnit 5 classes
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
因此,当您使用@ParameterizedTest
注释运行测试时,您将使用JUnit 5运行时,它将忽略JUnit 4注释(@Before
、@After
和@Rule
)。
使您的参数化测试工作的一种方法是将JUnit 4注释替换为适当的JUnit 5对应项。
为此,您首先需要测试容器JUnit 5集成。例如,作为Maven依赖关系:
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>junit-jupiter</artifactId>
<version>1.17.2</version>
<scope>test</scope>
</dependency>
那么你:
@Testcontainers
注释您的测试类@Container
注释而不是@Rule
@Before
和@After
替换为@BeforeEach
和@AfterEach
所以你的课会是这样的:
@Testcontainers
public class Test {
...
@Container
public BrowserWebDriverContainer chrome = new BrowserWebDriverContainer()
.withCapabilities(new ChromeOptions());
@BeforeEach
public void setUp() {
...
}
@AfterEach
public void tearDown() {
...
}
@ParameterizedTest
@CsvSource({"var1, var1", "var2, var2", "null, null"})
public void search(String email, String password) {
...
}
}
https://stackoverflow.com/questions/72627171
复制相似问题