[英]How to programmatically configure WebDriver in base class in Selenium Jupiter?
我想將基於 JUnit 4 的現有 Selenium-Tests 遷移到 JUnit 5。為此,我想使用Selenium-Jupiter 。
測試必須滿足的一項要求是,能夠在運行時切換 WebDriver 實現- 基於執行環境 - 使用一個通用基礎 class 進行所有測試:
我已經嘗試 根據文檔配置“通用 WebDriver”,但我不知道如何為 RemoteWebDriver 實現這一點(“示例 2”應該讓事情更清楚)。
關於內容, 這個 stackoverflow-posting 非常相關,但沒有產生令人滿意的答案。
更新:我自己解決了這個問題。 請參閱“示例 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:我想做,但還不行
基礎 class,進行 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”中的描述來實施具體測試。
您可以使用@TestTemplate
並使用兩個 browser.json 文件來利用browsers.json
器配置。
@TestTemplate
注釋的測試:class MyTest {
@TestTemplate
void my_logic_test_case(WebDriver webDriver) {
// ...
}
}
browsers.json
到您的類路徑(默認,使用本地 Firefox 安裝):{
"browsers": [
[
{
"type": "firefox"
}
]
]
}
browsers-ci.json
到你的類路徑(不是默認的,使用 Selenium Grid / RemoteWebDriver):{
"browsers": [
[
{
"type": "firefox",
"capabilities": {
"browserName": "firefox"
},
"arguments": [
"--headless"
],
"remoteUrl": "https://mygrid.com/wd/hub"
}
]
]
}
現在,您可以在本地運行測試,它將使用本地 Firefox。 如果您在 CI 環境中運行測試,請配置您的 CI 腳本以設置系統屬性sel.jup.browser.template.json.file
指向browsers-ci.json
。
例如,如果您使用 Maven 運行 Selenium-Jupiter 測試:
mvn test -Dsel.jup.browser.template.json.file=classpath:browsers-ci.json
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.