我尝试使用selenium web驱动程序使用 findElement 方法获取WebElement。有效。但是当我试图调用方法 findElement 和参数作为By.name(“”)来获取WebElement时,我遇到了反射api的问题。以下几行可以更好地了解问题。
Javaw抛出的异常
java.lang.NoSuchMethodException:org.openqa.selenium.firefox.FirefoxDriver.findElement(org.openqa.selenium.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");
WebElement element = driver.findElement(by);
完成代码的工作
答案 0 :(得分:0)
确实没有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);
因为第一个参数是应该运行该方法的对象。