簡體   English   中英

"有沒有辦法調用擴展 webdriver 類的 java 方法?"

[英]Is there a way to call a java method that extends a webdriver class?

我正在使用 WebDriverManager java 庫。 它提供了一個通用管理器,可以參數化以充當特定管理器(對於 Chrome、Firefox 等)。 我將它與 Selenium Webdriver 和 Junit 5 的 @Parameterized 和 @ValueSource 注釋一起使用,以便我可以在多個瀏覽器上運行我的測試。 我根據 WebDriverManager 文檔創建了一個實現:

 public class WebTest {

 WebDriver driver = null;


 @ParameterizedTest
 @ValueSource(classes = { ChromeDriver.class, FirefoxDriver.class })
 public void navigateToUrl(String url, Class<? extends WebDriver> webDriverClass) { //WebDriver class gets extended
 driver = WebDriverManager.getInstance(webDriverClass).create();
 driver.manage().window().maximize();
 driver.get(url);

根據@ValueSource 文檔<\/a>,您不能使用此注釋來傳遞某些類的實例。 此注釋只能用於傳遞原始值、字符串和CLASSES<\/em> (而不是對象)。 您可以使用這些類來測試某個方法或某個對象是否是參數類的實例。 您不能使用它將實例傳遞給方法。

INSTEAD<\/em> ,您可以做的是使用@MethodSource API<\/a>傳遞可以為您提供(返回)這些實例的方法的名稱(查找討論多個參數的段落)。 例如,我認為您可以執行以下操作:

@ParameterizedTest
@MethodSource("getWebDrivers")
public void navigateToUrl(String url, List<WebDriver> drivers) {
 driver = WebDriverManager.getInstance(webDriverClass).create();
 driver.manage().window().maximize();
 driver.get(url);
}


public Stream<Arguments> getWebDriversAndUrl() {
    List<WebDrivers> drivers = new ArrayList<>();
    ... // Here you need to instantiate your drivers (skip if you have them already instantiated and set as global variables.
    drivers.add(chromeDriver);
    drivers.add(firefoxDriver);
    return return Stream.of(
        arguments("url1", drivers),
        arguments("url2", drivers);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM