如何在 java 中将两种方法简化为一种方法
How to simplify two methods to one method in java
我需要将两种方法合并为一种方法(两种方法只有 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();
}
如果您有两个或多个具有相同方法主体且仅内部值发生变化的方法,您可以简单地将变量数据作为参数传递给方法。在你的情况下,
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()
和旧版本基本相同,即使它在内部发生了变化。
最后,您显然有创建所需数组的负担。
我需要将两种方法合并为一种方法(两种方法只有 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();
}
如果您有两个或多个具有相同方法主体且仅内部值发生变化的方法,您可以简单地将变量数据作为参数传递给方法。在你的情况下,
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()
和旧版本基本相同,即使它在内部发生了变化。
最后,您显然有创建所需数组的负担。