2

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.

+0

Was gibt 'file.getAbsolutePath()' zurück? Es scheint redundant zu sein, wenn der Pfad bereits ein absoluter Pfad ist. – JeffC

+0

Warum deklarieren Sie die Datei zweimal? Einmal als 'final' in der Klasse und einmal in' setup() '? – JeffC

+0

'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

Antwort

1

Deklaration der Variablen als Public Static Final in der Klasse, sollten Sie in der main-Methode (Klassenname.Variablenname) darauf zugreifen können. Und das wäre ideal, wenn Sie keine Property-Datei verwenden.

Wenn Sie Main() Methode teilen kann ich weiter untersuchen.

Hinweis: Ich habe derzeit keine Privilegien zu kommentieren, musste daher posten. Es könnte jedoch keine vollständige Antwort sein.

+0

Dies passt tatsächlich das Antwortformat besser als das Kommentarformat. – dorukayhan

+0

Die Hauptmethode ist 'setup()' in diesem Fall, oder so denke ich .. Und ja, ich nahm das an, indem ich es in der Klasse als Public Static Final erklärte, dass es in 'setup()' sichtbar wäre. Ist das nicht der Fall? Soll ich stattdessen einen bestimmten 'Main (String [] args)' deklarieren? – drs

+0

Okay, hier ist, was ich denke, Problem könnte sein. Sie versuchen, den Browser zu initiieren, bevor Sie den Pfad für webdriver.ie.driver public static endgültig festlegen WebDriver driver = newInternetExplorerDriver (desCaps); Vielleicht möchten Sie die Eigenschaft webdriver.ie.driver festlegen, bevor Sie den Treiber initiieren. – Amit