我需要將兩種方法組合成一種方法(兩種方法只有 xpath 值在變化,其余功能相同)。除了 xpath 值外,兩種方法執行相同的功能。我如何在一種方法中使用這兩個 xpath 值并將兩種方法合二為一。
NAV_MENU_ITEMS_LIST= driver.findElement(By.xpath(mat-input-0))
NAV_SUB_MENU_ITEMS_LIST= driver.findElement(By.xpath(//span[text()=' Quick Login ']))
private void methodOne(String menuItemName) {
NAV_MENU_ITEMS_LIST.findBy(text(menuItemName))
.click();
log.info("Navigating to " menuItemName);
}
private void methodTwo(String subMenuItemName) {
NAV_SUB_MENU_ITEMS_LIST.findBy(text(subMenuItemName))
.click();
log.info("Navigating to " subMenuItemName);
}
主要呼叫方法:
public DashboardPage goDashboardManagement() {
methodOne("People");
methodTwo("Salary");
return new PplPage();
}
uj5u.com熱心網友回復:
如果您有兩個或多個方法具有相同的方法主體并且只有內部值更改,您可以簡單地將變數資料作為引數傳遞給方法。在你的情況下,
private void commonizedMethod(String menuItemName, WebElement element) {
element.findBy(text(menuItemName)).click();
log.info("Navigating to: " menuItemName);
}
或者,您可以通過將 Xpath 傳遞給方法來在內部決議元素
private void commonizedMethod(String menuItemName, WebDriver driver, String xpath) {
WebElement element = driver.findElement(By.xpath(xpath));
element.findBy(text(menuItemName)).click();
log.info("Navigating to: " menuItemName);
}
如果驅動是全域引數,則不需要在方法中傳遞。
更新:根據 OP 剛剛發布的更新,我正在添加其他資訊來解決該問題。
多年來我所做的一個“技巧”是利用覆寫方法來支持遺留代碼并同時擴展功能。例如,在這種情況下,遺留代碼有兩種相似的方法,新功能合并為一種。
舊代碼
public DashboardPage goDashboardManagement() {
methodOne("People");
methodTwo("Salary");
return new PplPage(); // not sure what this does or relevancy to the two method calls that preceded
}
添加的功能(被覆寫的方法)
public DashboardPage goDashboardManagement(String[] args, WebElement[] elements) {
// check to make sure both arrays are of the same length
for (for int i = 0; i < arr.length, i ) {
commonizedMethod(args[i], elements[i]);
}
return new PplPage(); // not sure what this does or relevancy to the two method calls that preceded
}
由于舊的遺留goDashboardManagement()方法具有硬編碼值并且遵循這種模式,并且假設
NAV_MENU_ITEMS_LIST和NAV_SUB_MENU_ITEMS_LIST是全域常量,我可以簡單地更新方法體,如下所示:
public DashboardPage goDashboardManagement() {
String[] arr = {"People", "Salary"};
WebElement elements = {NAV_MENU_ITEMS_LIST, NAV_SUB_MENU_ITEMS_LIST};
commonizedMethod(arr, elements);
return new PplPage(); // not sure what this does or relevancy to the two method calls that preceded
}
這將允許您洗掉methodOne(String)和methodTwo(String)安全,仍然保持goDashboardManagement()支持傳統的代碼。您對該方法的單元測驗應該繼續作業,因為新版本goDashboardManagement()和舊版本基本相同,即使它在內部發生了變化。
最后,您顯然有創建所需陣列的負擔。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/409797.html
標籤:
上一篇:如果在Selenium中進行測驗時是否創建了帳戶,則驗證不起作用
下一篇:獲取資料庫檔案名
