我想将基于JUnit 4的现有Selenium-Test迁移到JUnit5。为此,我想使用Selenium-Jupiter。
测试必须满足的一个要求是,能够基于运行环境在运行时切换WebDriver实现-对所有测试使用一个通用基类 strong>:
我已经尝试配置“通用WebDriver” according to documentation,但是我不知道如何为RemoteWebDriver实现这一点(“示例2”应该使事情更清楚)。
关于内容this stackoverflow-posting is quite related,但未给出令人满意的答案。
更新:我自己解决了这个问题。请参阅“示例3” ...
嘿Boni,也许您想稍微更新一下Selenium Jupiter文档。至少我遇到了一些问题,弄清楚了...哦,非常感谢您对Selenium Jupiter(以及底层的WebDriverManger)所做的出色工作。
示例1:有效,但不美观
@ExtendWith(SeleniumExtension.class)
class MyTest {
@EnabledIfSystemProperty(named = "os.name", matches = "Windows 10")
@Test
void test_executed_with_local_firefox(FirefoxDriver ffDriver) {
executeTestCaseWith(ffDriver);
}
@EnabledIfSystemProperty(named = "os.name", matches = "Linux")
@Test
void test_executed_with_firefox_from_selenium_grid(@DriverUrl("http://...") RemoteWebDriver remoteDriver) {
executeTestCaseWith(remoteDriver);
}
void executeTestCaseWith(WebDriver webDriver) {
webDriver.get(...)
Assert(...)
}
}
我看到的问题是:
示例2:我想做的事,但是还行不通
进行WebDriver配置的基类:
abstract class UiTest {
@RegisterExtension
static SeleniumExtension seleniumExtension = new SeleniumExtension();
@BeforeAll
static void setUpOnce() {
// This check is not the problem discussed here
boolean isRunningInCiEnvironment = ...
Browser firefox;
if( ! isRunningInCiEnvironment ) {
// This works
firefox = BrowserBuilder.firefox().build();
} else {
// this does not exist yet!
//firefox = BrowserBuilder.remoteWebDriver().url("http://...").build();
// This executes, but does not behave as expected
// The URL is pretty much ignored.
firefox = BrowserBuilder.firefox().url("http://...").build();
}
seleniumExtension.addBrowsers(firefox);
}
}
然后在测试中,我只需要做某事。这样。
class MyTest extends UiTest {
@Test
void my_one_logic_test_case(WebDriver webDriver) {
webDriver.get(...)
Assert(...)
}
}
请注意,参数的类型仅是WebDriver!
示例3:我当前的解决方案
abstract class UiTest {
@RegisterExtension
static SeleniumExtension seleniumExtension = new SeleniumExtension();
@BeforeAll
static void setUpOnce() {
// This check is not the problem discussed here
boolean isRunningInCiEnvironment = ...
if( isRunningInCiEnvironment ) {
// This is doing the trick!
seleniumExtension.getConfig().setSeleniumServerUrl("http://...");
}
seleniumExtension.addBrowsers( BrowserBuilder.firefox().build() );
}
}
现在可以按照“示例2”中的说明实施具体测试。