Ich arbeite an der Entwicklung einer Anwendung, die zum Automatisieren von Formfülloperationen in Java mit Selen verwendet wird. Ich habe momentan beide eingerichtet, um auf einem Thumbdrive tragbar zu sein. Mein Code ist unten:Dateipfad-Deklaration nicht sichtbar für Methodenaufruf in Hauptmethode
package AutoFill;
import java.io.File;
import java.util.concurrent.*;
import javafx.application.Application.*;
import javafx.application.*;
import javafx.stage.Stage;
import org.openqa.selenium.*;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.ie.*;
import org.openqa.selenium.ie.InternetExplorerDriver.*;
public class Login extends Application {
public static final File file = new File("E:/IEDriverServer_Win32_2.53.1/IEDriverServer.exe"); //path to IEDriver on USB stick
public static final DesiredCapabilities desCaps = DesiredCapabilities.internetExplorer(); //new desired capabilities object to set IEDriver run params
public static final WebDriver driver = new InternetExplorerDriver(desCaps); //new IEDriver instance
public static final String url = new String("url_here"); //starting url
@Override
public void start(Stage primaryStage) {
primaryStage.show();
}
public void setup() {
File file = new File("E:/IEDriverServer_Win32_2.53.1/IEDriverServer.exe");
System.setProperty("webdriver.ie.driver", file.getAbsolutePath()); //force IEDriver path
setIEDesCaps(desCaps); //run cap setter method
driver.findElement(By.tagName("html")).sendKeys(Keys.chord(Keys.CONTROL,"0")); //set screen zoom to 100% to resolve webdriver errors
driver.get(url); //navigate to url
}
public void setIEDesCaps(DesiredCapabilities desCaps) { //setter method to establish IE webdriver run params
desCaps.setPlatform(org.openqa.selenium.Platform.WINDOWS);
desCaps.setCapability("EnableNativeEvents", false);
desCaps.setCapability("ignoreZoomSetting", true);
desCaps.setJavascriptEnabled(true);
}
}
Wenn dieser Code ausgeführt wird (mit einer echten URL, natürlich) Eclipse erzeugt die folgenden Fehler:
java.lang.IllegalStateException: The path to the driver executable must be set by the webdriver.ie.driver system property;
ich tatsächlich den Treiber manuell Pfad gesetzt versucht haben zu in zwei verschiedenen Instanzen - ganz am Anfang als statische Variable (was am sinnvollsten erschien), sowie innerhalb der Hauptmethode setup(). Einzeln (beim Auskommentieren des einen oder des anderen) war keine Platzierung des Treiberpfades für die Hauptmethode sichtbar. Dieser Treiberpfad war sichtbar und funktionierte in einer früheren Version dieses Codes, bevor ich die Login-Klasse in eine Erweiterung von Application verwandelte.
Wie kann ich den Dateipfad im aktuellen Code positionieren, so dass er für die Hauptmethode sichtbar ist? Ich fühle mich, als würde ich hier etwas vermissen.
Was gibt 'file.getAbsolutePath()' zurück? Es scheint redundant zu sein, wenn der Pfad bereits ein absoluter Pfad ist. – JeffC
Warum deklarieren Sie die Datei zweimal? Einmal als 'final' in der Klasse und einmal in' setup() '? – JeffC
'Datei' wird zweimal deklariert, aber in beiden Fällen vor der Kompilierung auskommentiert. Die doppelte Deklaration wurde verwendet, um zu testen, ob es in 'setup()' plaziert wurde. Wenn ich mich nicht irre, wird 'file.getAbsolutePath()' nur verwendet, um den Pfad von 'file' nach' System.setProperty() 'zu übergeben. Dies ist jedoch recycelter Code, und Sie haben wahrscheinlich Recht auf die Redundanz. Vielleicht sollte ich den Zwischenhändler ausschneiden und 'System.setProperty()' mit dem absoluten Pfad direkt ersetzen? Das sollte mir erlauben, die Deklaration alle zusammen zu überspringen. – drs