私は、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の拡張にする前に、このコードの前のバージョンで表示され、機能していました。
現在のコードにファイルパスを配置して、メインメソッドでそのファイルパスを表示するにはどうすればよいですか?私はここで何かを逃しているように感じる。
'file.getAbsolutePath()'は何を返しますか?パスが既に絶対パスである場合、それを使用するのは冗長なようです。 – JeffC
なぜあなたはファイルを2回宣言していますか?かつてクラスの 'final'としてかつ' setup() 'で一度? – JeffC
'file'は2回宣言されていますが、どちらのインスタンスでもコンパイル前にコメントアウトされています。 double宣言は 'setup()'に置くかどうかをテストするために使われました。 私が間違っていない場合、 'file.getAbsolutePath()'は 'file'から' System.setProperty() 'にパスを渡すために使われています。これはリサイクルされたコードですが、冗長性についてはおそらく正しいでしょう。たぶん、私は仲介人をカットし、 'System.setProperty()'を絶対パスで直接置き換えるべきでしょうか?それで私はすべての宣言をスキップすることができます。 – drs