3 回答

TA貢獻1995條經驗 獲得超2個贊
Switch-case
是許多編程語言中的反模式。為了避免它們,您可以使用一些類似于Replace conditional with polymorphism
Java 的技術。我建議將它們與 一起使用Reflection
。這是 Java 的一個功能。

TA貢獻1752條經驗 獲得超4個贊
我強烈建議不要以這種方式編寫代碼,而是創建一個框架。
創建一個 SeleniumUtility 類(或任何您想要的名稱)并編寫如下方法: 示例(您可以刪除 WebDriver 驅動程序)
/**
* Method returns WebElement by Xpath.
*
* @param String xpathExpression
* @param WebDriver driver
* @return WebElement
*/
public WebElement getElementByXpath(String xpathExpression, WebDriver driver){
return driver.findElement(By.xpath(xpathExpression));
}
/**
* Method returns WebElement by ID.
*
* @param String id
* @param WebDriver driver
* @return WebElement
*/
public WebElement getElementByID(String id, WebDriver driver){
return driver.findElement(By.id(id));
}
或者是這樣的:
/**
* Method returns By.
*
* @param String identifier Example: xpath,id,name etc
* @param String expression Example: //*[@class='text']
* @return By
*/
public By getBy(String identifier, String expression){
switch (identifier.toLowerCase()) {
case "xpath":
return By.xpath(expression);
case "id":
return By.id(expression);
case "name":
return By.name(expression);
case "classname":
return By.className(expression);
case "cssselector":
return By.cssSelector(expression);
case "linktext":
return By.linkText(expression);
case "partiallinktext":
return By.partialLinkText(expression);
case "tagname":
return By.tagName(expression);
default:
throw new RuntimeException("Invalid identifier passed: " + identifier);
}
}
在不同的類中編寫顯式等待和流暢等待并反復使用。
現在你的整個代碼將是這樣的:
try {
CurrentObject = waitTillElementLocated(getBy("cssselector","SearchPar"));
} catch (Exception e) {
System.out.println("Element not found: " + e);
}
或者
try {
CurrentObject = waitTillElementLocated(getBy("id","SearchPar"));
} catch (Exception e) {
System.out.println("Element not found: " + e);
}

TA貢獻1825條經驗 獲得超4個贊
如果 searchBy 總是匹配方法名稱,那么我認為反射可能是解決方案。
Method searchMethod = By.class.getMethod(searchBy, returnClass.class); CurrentObject = new WebDriverWait(driver, ConstantValues.LONGWAIT).until(ExpectedConditions.presenceOfElementLocated(searchMethod.invoke(null,searchPar);
您必須捕獲一些可能的異常。
添加回答
舉報