使用 java 反射 API 调用Selenium Web 驱动程序方法"findElement"时代码中的问题



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

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

最新更新