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);
您必须捕获一些可能的异常。
添加回答
举报