2 Stimmen

Problem im Code beim Aufrufen der Selenium-Web-Treiber-Methode 'findElement' unter Verwendung von Java Reflection Api

Ich habe versucht, mit Selenium Web-Treiber, um die WebElement mit Methode erhalten findElement . es funktionierte. aber hatte das Problem mit Reflection api, wenn ich versuchte, die Methode aufzurufen findElement und Argument als By.name(""), um WebElement im Gegenzug zu erhalten. hier die folgenden Zeilen können mehr Idee über Problem geben.

Javaw hat die Ausnahme ausgelöst, dass

java.lang.NoSuchMethodException: org.openqa.selenium.firefox.FirefoxDriver.findElement(org.openqa.selenium.By$ByName) at java.lang.Class.getMethod(Unbekannte Quelle)


Allgemein erprobt Ansatz (Arbeiten)

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

Implementiert mit Java-Reflection-Api (Ausnahme durch folgenden Code aufgetreten)

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

Bitte kann jemand führen, um die Arbeit von Code mit Reflexion api getan bekommen

0voto

Petr Janeček Punkte 36474

Es gibt wirklich keine findElement(By$name) ( By.name ist eine Unterklasse von abstract By ). Daher müssen Sie entweder aufrufen:

Method getMethod = c.getMethod("findElement", new Class[] { by.getClass().getSuperclass() });

o

Method getMethod = c.getMethod("findElement", new Class[] { By.class });

Außerdem ist der Aufruf der Methode in Ihrem Code falsch, Sie müssen ihn ändern in

WebElement element = (WebElement)getMethod.invoke(driver, by);

denn das erste Argument ist das Objekt, auf dem die Methode ausgeführt werden soll.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X