How to run webdriver(Java) on Firefox 47.0 32bit
色々な文献を照会して試行錯誤した結果、
Firefox47.0をseleniumで動作させることが確認できました。
その方法を以下の通り共有します。
プログラム
prop.xml (プロパティファイル)
<entry key="geckoDriverPath">C:\Program Files (x86)\geckodriver-v0.8.0-win32\wires.exe</entry> <entry key="wiresPath">C:\Program Files (x86)\wires-v0.7.1-win32\wires.exe</entry> <entry key="32bitFFPath">C:\Program Files (x86)\Mozilla Firefox\firefox.exe</entry> <entry key="FFDevPath">C:\Program Files (x86)\Firefox Developer Edition\firefox.exe</entry> <entry key="NightlyPath">C:\Program Files (x86)\Nightly\firefox.exe</entry> <entry key="64bitFFPath">C:\Program Files\Mozilla Firefox\firefox.exe</entry>
Driver.java (Firefoxドライバを生成メソッドを定義したクラス)
public static WebDriver createFireFoxWebDriver() { // https://id:pw@url/でアクセス可能なFireFox用Profileを生成・ロードする ProfilesIni profile = new ProfilesIni(); FirefoxProfile myprofile = profile.getProfile("SeleniumProfile"); // geckoDriverではなく、wires.exeをwebdriver.gecko.driverとして指定する // System.setProperty("webdriver.gecko.driver", Props.hmProp.get("geckoDriverPath")); System.setProperty("webdriver.gecko.driver", Props.hmProp.get("wiresPath")); // プロファイルをセットする DesiredCapabilities capabilities = DesiredCapabilities.firefox(); capabilities.setCapability(FirefoxDriver.PROFILE, myprofile); capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true); capabilities.setJavascriptEnabled(true); // marionetteをtrueにする capabilities.setCapability("marionette", true); // 32bit版FireFox v47.0を指定する capabilities.setCapability("binary", Props.hmProp.get("32bitFFPath")); // capabilities.setCapability("binary", Props.hmProp.get("FFDevPath")); // capabilities.setCapability("binary", Props.hmProp.get("NightlyPath")); // capabilities.setCapability("binary", Props.hmProp.get("64bitFFPath")); // (個人的な取り組み)でBasic認証を乗り越える設定を施す(プロファイルに設定しないときはコメントを外す→外してもダメだった。プロファイルに設定するのが無難) // capabilities.setCapability("browser.safebrowsing.malware.enabled", false); // capabilitiesにプロファイルを指定してドライバを生成する driver = new MarionetteDriver(capabilities); return driver; }
このような形で@Testを実行したところ、Firefox 47.0 32bit版(≠Developer Edition)を起動することが出来ました。
以下は起動したFirefoxのトラブルシューティング情報です。
アプリケーション基本情報
名前: Firefox バージョン: 47.0 ビルド ID: 20160604131506 更新チャンネル: release ユーザエージェント: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0 OS: Windows_NT 6.1 x86 マルチプロセスウィンドウ: 0/1 (無効) セーフモード: false
実行したテスト
試しに以下の簡単な処理を実行しました。実行できたseleniumメソッドの報告が目的なので、体裁は無視してます。
@BeforeMethod createFireFoxWebDriver(); //上記Driver.java記載の処理 driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); driver.get(url); // Basic認証が必要なサイトへリクエスト送信する driver.manage().window().maximize(); @Test PageObject TopPage = PageFactory.initElements(driver, PageObject.class); portalTopPage.web_element.click(); @AfterMethod driver.quit();
注意点
http://qiita.com/yssg/items/a054d67bc7c7fc39b276?utm_source=dlvr.it&utm_medium=twitter
こちらで紹介されていた「導入手順#2.GeckoDriverをwires.exe
にリネーム」が上記の場合、うまくいきませんでした。(Firefoxが起動しませんでした)
そこで「geckodriver-v0.8.0-win32」ではなく、「wires-v0.7.1-win32」を利用したところ、うまくいきました。
これは https://github.com/seleniumhq/selenium/issues/1431 ここで
@AutomatedTester(David Burnsさん)がコメントされていた「Was this using the latest wires release?」というコメントをヒントにしました。
上記に至るまでに試したこと。
- FirefoxプロファイルをロードせずにgeckoDriverでブラウザを起動する 非Basic認証サイトなら ◯
- geckoDriver+Nightlyを使う
- geckoDriver+Developer Editionを使う
Testを停止後、Firefoxが起動してテストケースが走るという意味不明な動作をしました。
No.2,3は47.0が起動してしまいました。
以上、少しでも参考になれば幸いです。