selenium-webdriver - 如何在 JUnit 5 中参数化 beforeEach()?

标签 selenium-webdriver junit5 parameterized-unit-test

我使用 JUnit 5 作为我的测试运行器。

在设置方法中,我硬编码了 3 个参数( platformNameplatformVersiondeviceName )。我有一个测试方法可以测试各种组合......这意味着,当运行我的 testLogin() 时测试,它应该在多个平台名称、版本、设备名称上运行...

所以,我尝试如下...

@BeforeEach
@CsvSource({"IOS,13.0,iPhone X Simulator", "IOS,13.2,iPhone Simulator", "IOS,13.3,iPhone XS Simulator"})
void setUp(String platformName, String platformVersion, String deviceName) throws MalformedURLException {
    ....
    capabilities.setCapability("platformName", platformName);
    capabilities.setCapability("platformVersion", platformVersion);
    capabilities.setCapability("deviceName", deviceName);
    capabilities.setCapability("methodName", testInfo.getDisplayName());
}

我的问题是,如何才能beforeEach()方法可以参数化吗?另外,我想获取测试方法名称...所以,如果我指定参数,那么我应该在哪里指定 TestInfo 参数。

请帮我。我也看到了下面的问题...

Parameterized beforeEach/beforeAll in JUnit 5

========

public class TestBase {

    @BeforeEach
    void setUp(TestInfo testInfo) throws MalformedURLException {
        MutableCapabilities capabilities = new MutableCapabilities();
        capabilities.setCapability("platformName", "iOS");
        capabilities.setCapability("platformVersion", "13.2");
        capabilities.setCapability("deviceName", "iPhone Simulator");
        capabilities.setCapability("name", testInfo.getDisplayName());
        capabilities.setCapability("app", “/home/my-user/testapp.zip");

        driver = new IOSDriver(
                new URL("https://192.168.1.4:5566/wd/hub"),
                capabilities
        );
    }
}

public class LoginTest extends TestBase {

    @Test
    public void testLogin() {
        driver.findElement(By.id("user-name")).sendKeys(“myuser);
        driver.findElement(By.id("password")).sendKeys(“mypassword);
        driver.findElement(By.id(“login_btn”)).click();
        assertTrue(true);
    }
}

最佳答案

您不能参数化 @BeforEach方法。 JUnit5 仅支持参数化测试(测试方法)。

参数化测试的声明就像常规 @Test方法,但使用 @ParameterizedTest注释代替。此外,您必须至少声明一个来源(例如 @CsvSource@ValueSource 等)

例如:

    @ParameterizedTest
    @CsvSource({
        "apple,         1",
        "banana,        2",
        "'lemon, lime', 0xF1"
    })
    void testWithCsvSource(String fruit, int rank) {
        assertNotNull(fruit);
        assertNotEquals(0, rank);
    }

关于selenium-webdriver - 如何在 JUnit 5 中参数化 beforeEach()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62036724/

相关文章:

selenium-webdriver - 如何在 Robot 框架中获取当前 URL?

python-3.x - 如何参数化 xpath 并将其解析为文本?

Kotlin Junit5 ValueSource 作为数组变量

java - 可以通过@MethodSource (junit 5.1) 传递多维数组吗?

java - 并行运行 junit 参数化测试(而不是类)

java - 如何在 Ant JunitLauncher 中将系统属性作为参数

selenium - 无法通过 TestNG Dataprovider 并行运行超过 10 个测试

java - 如何使用 Selenium WebDriver 处理动态文本(成功和失败文本)

java - Selenium Webdriver - 如何在 CSS 菜单中选择元素

java - 在 JUnit Jupiter 中使用自定义组合注释时获取 @Autowired bean 的 NPE