调用selenium web驱动程序方法时代码问题' findElement'使用java反射api

时间:2012-07-16 09:47:39

标签: java reflection selenium automation selenium-webdriver

我尝试使用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);

请有人指导使用反射api

完成代码的工作

1 个答案:

答案 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);

因为第一个参数是应该运行该方法的对象。