2

私は、JavaでSeleniumを使用してフォームの埋め込み操作を自動化するためのアプリケーションの開発に取り組んでいます。私は現在、サムドライブに持ち運べるように設定されています。私のコードは以下の通りです:メインメソッドのメソッド呼び出しでファイルパス宣言が見えない

java.lang.IllegalStateException: The path to the driver executable must be set by the webdriver.ie.driver system property; 

私は実際に手動でドライバのパスを設定しようとしました:

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

} 

} 

(もちろん、実際のURLで)このコードを実行すると、Eclipseは次のエラーを生成します2つの異なるインスタンス - 最初の静的変数(最も賢明だったと思われる)と、メインのsetup()メソッドの中で。個別に(いずれかをコメントアウトするとき)、ドライバパスの配置はメインメソッドから見えませんでした。このドライバパスは、LoginクラスをApplicationの拡張にする前に、このコードの前のバージョンで表示され、機能していました。

現在のコードにファイルパスを配置して、メインメソッドでそのファイルパスを表示するにはどうすればよいですか?私はここで何かを逃しているように感じる。

+0

'file.getAbsolutePath()'は何を返しますか?パスが既に絶対パスである場合、それを使用するのは冗長なようです。 – JeffC

+0

なぜあなたはファイルを2回宣言していますか?かつてクラスの 'final'としてかつ' setup() 'で一度? – JeffC

+0

'file'は2回宣言されていますが、どちらのインスタンスでもコンパイル前にコメントアウトされています。 double宣言は 'setup()'に置くかどうかをテストするために使われました。 私が間違っていない場合、 'file.getAbsolutePath()'は 'file'から' System.setProperty() 'にパスを渡すために使われています。これはリサイクルされたコードですが、冗長性についてはおそらく正しいでしょう。たぶん、私は仲介人をカットし、 'System.setProperty()'を絶対パスで直接置き換えるべきでしょうか?それで私はすべての宣言をスキップすることができます。 – drs

答えて

1

変数をPublic Static Finalクラスとして宣言すると、メインメソッド(classname.variablename)で変数にアクセスできるはずです。 これは、プロパティファイルを使用しない場合には理想的な場所です。

Main()メソッドを共有できる場合は、さらに調べることができます。

注:現在コメントする特権がありませんので、投稿する必要があります。しかし、完全な答えではないかもしれません。

+0

これは、実際には、回答形式がコメント形式より優れています。 – dorukayhan

+0

主な方法はこの例では 'setup()'です。そう思っています。そして、 'setup()'で見ることができるPublic Static Finalとしてクラス内で宣言すると仮定しました。そうじゃないの?代わりに特定の 'Main(String [] args)'を宣言すべきですか? – drs

+0

ここに問題があるかもしれないと思うのです。 webdriver.ie.driverのパスを設定する前にブラウザを起動しようとしています。public static final WebDriver driver = newInternetExplorerDriver(desCaps);ドライバを起動する前にwebdriver.ie.driverプロパティを設定することができます。 – Amit

関連する問題