本文介紹了有沒有一種方法可以調(diào)用擴展Web驅(qū)動程序類的Java方法?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
我正在使用WebDriverManager Java庫。它提供了一個通用管理器,可以被參數(shù)化為特定的管理器(對于Chrome、Firefox等)。我將它與Selify WebDriver和JUnit5的@PARAMETIZED和@ValueSource注釋一起使用,這樣我就可以在多個瀏覽器上運行我的測試。
我按照WebDriverManager文檔創(chuàng)建了一個實現(xiàn):
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);
在包含黃瓜步驟定義的類中,我嘗試調(diào)用navigateToUrl
方法,但出現(xiàn)如下編譯錯誤:
public class WebAppStepDefinitions {
private final WebTest webTest = new WebTest();
@Given("^I have navigated to the web url "([^"]*)"$")
public void navigateToUrl(String url) {
webTest.navigateToUrl(url, Class<? extends WebDriver > webDriverClass); //error on this line: `Cannot resolve symbol webDriverClass`
}
如何正確調(diào)用位于WebTest
類中的navigateToUrl
?
推薦答案
根據(jù)@ValueSource documentation,您不能使用此注釋來傳遞某些類的實例。該批注只能用于傳遞原始值、字符串和類(不能傳遞對象)。您可以使用這些類來測試某個方法或某個對象是否為參數(shù)類的實例。不能使用它將實例傳遞給方法。
而不是,您可以做的是使用@MethodSource API傳遞方法的名稱,該方法可以為您提供(返回)那些實例(查找談?wù)摱鄠€參數(shù)的段落)。例如,我認為您可以這樣做:
@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);
}
更新:
您的實現(xiàn)有一個編譯錯誤,因為您未能在步驟定義中聲明Web驅(qū)動程序類的參數(shù)。步驟定義只有一個參數(shù)。此行
webTest.navigateToUrl(String url, Class<? extends WebDriver > webDriverClass);
需要
webTest.navigateToUrl(url, webDriverClass);
問題是您在步驟定義中有一個作為參數(shù)傳遞的URL,而不是Class
對象。
如果從步驟定義內(nèi)部調(diào)用該方法,則甚至不需要使用@ValueSource
。您只需要一個數(shù)據(jù)表,并以這種方式直接從步驟定義傳遞參數(shù):
@Given("^I have navigated to the web url$")
public void navigateToUrl(DataTable table) {
List<list> data = table.raw();
// iterate thru list and call driver.get(url);
}
您的測試步驟應(yīng)該如下所示:
Given I have navigated to the web url
| url | chrome |
| url | firefox |
由于您不能直接傳遞Class
實例,因為它不是Cucumber支持的數(shù)據(jù)類型,因此創(chuàng)建自定義類型比使用此用例更麻煩。您將使用WebDriverManager
getIntance()
,并使用瀏覽器名稱而不是驅(qū)動程序類。
這篇關(guān)于有沒有一種方法可以調(diào)用擴展Web驅(qū)動程序類的Java方法?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,