2

メソッドfindElementを使用して WebElement を取得するために、セレンWebドライバーで試しました。出来た。しかし、メソッドfindElementと引数をBy.name("")として呼び出してWebElementを取得しようとしたときに、リフレクションAPIに問題がありました。ここで、次の行で問題についてより多くのアイデアを得ることができます。

Javawは例外をスローしていました

java.lang.NoSuchMethodException: java.lang.Class.getMethod の org.openqa.selenium.firefox.FirefoxDriver.findElement(org.openqa.selenium.By$ByName) (不明なソース)

一般的なアプローチ(ワーキング)で試した

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を使用してコードの作業を完了するようにガイドできる人がいます

4

1 に答える 1

0

本当にありませんfindElement(By$name)(By.nameは abstract のサブクラスです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);

最初の引数は、メソッドを実行するオブジェクトであるためです。

于 2012-07-16T21:38:49.377 に答える