Java反射 - NoSuchMethodException当方法存在时抛出

时间:2017-02-07 20:45:58

标签: java reflection automation qa

我正在尝试创建一个方法,该方法接受两个字符串参数并对对象调用方法调用。这两个参数将提供className和methodName。理想情况下,我想使用反射来查找对象和方法,然后调用该方法。这适用于我管理的自动化套件。

public void executeMethod(String className, String methodName){
   Class object = className.getClass(); 
   Method objMethod = object.getMethod(methodName); 
   objMethod.invoke(pageObject);  
}

当我运行它时,我收到一个错误NoSuchMethodException:java.lang.String.isPageDisplayed()。

我相信我的问题存在于找到对象或与对象有关的事情。

如果我执行上面所示的相同方法,它可以工作:

public void executeMethod(String className, String methodName){ 
    Method objMethod = knownObject.class.getMethod(methodName);
    m1.invoke(pageObject);
}

有人能帮助我弄清楚我做错了吗?在这种情况下,我试图调用的方法是public static void方法。

3 个答案:

答案 0 :(得分:0)

String className应该是Object类。否则,它假定该方法位于String的实例中。

答案 1 :(得分:0)

由于className的类型为StringclassName.getClass()只返回Class<String>,显然没有该方法作为成员。相反,您应该使用Class.forName(className)

public void executeMethod(String className, String methodName){
   Class<?> clazz = Class.forName(className); 
   Method objMethod = clazz.getMethod(methodName); 
   objMethod.invoke(pageObject);  
}

答案 2 :(得分:0)

假设您有要调用该方法的对象,则将其传递给方法而不是类名。此外,您应该使用getDeclaredMethod,而不是getMethod

public void executeMethod(Object object, String methodName) {
    Class clazz = object.getClass(); 
    Method method = clazz.getDeclaredMethod(methodName); 
    method.invoke(object);  
}