我尝试使用selenium web驱动程序,使用方法findElement获取WebElement。它奏效了。但是反射api有问题,当我试图调用findElement方法和参数By.name(")以获取WebElement作为回报时。下面几行可以提供更多关于这个问题的想法
Javaw抛出异常java.lang.NoSuchMethodException:org.openqa.selence.ffirefox.FirefoxDriver.findElement(org.openqa-selence.By$ByName)位于java.lang.Class.getMethod(未知源)
尝试一般方法(工作)
WebDriver driver = new FirefoxDriver();
Method[] methods = driver.getClass().getMethods();
for(Method method:methods){
System.out.println(method.getName());
}
driver.manage().window().maximize();
driver.get("http://www.facebook.com/");
By by = By.name("email");
WebElement element = driver.findElement(by);
使用Java反射api实现(通过以下代码发生异常)
WebDriver driver = new FirefoxDriver();
Method[] methods = driver.getClass().getMethods();
for(Method method:methods){
System.out.println(method.getName());
}
driver.manage().window().maximize();
driver.get("http://www.facebook.com/");
By by = By.name("email");
Class c = Class.forName(driver.getClass().getName());
Method getMethod = c.getMethod("findElement", new Class[]{by.getClass()});
getMethod.setAccessible(true);
WebElement element = (WebElement) getMethod.invoke(driver, by);
请有人可以指导使用反射api 完成代码的工作
实际上没有findElement(By$name)
(By.name
是抽象By
的一个子层)。因此,您必须拨打以下任一电话:
Method getMethod = c.getMethod("findElement", new Class[] { by.getClass().getSuperclass() });
或
Method getMethod = c.getMethod("findElement", new Class[] { By.class });
此外,代码中方法的调用是错误的,您需要将其更改为
WebElement element = (WebElement)getMethod.invoke(driver, by);
因为第一个参数是应该在其上运行方法的对象。