1. 程式人生 > >Selenium與Firefox版本不相容

Selenium與Firefox版本不相容

更新Firefox到54.0後發現以前的基於Selenium 2.48.2的測試程式報錯:
org.openqa.selenium.firefox.NotConnectedException: Unable to connect to host 127.0.0.1 on port 7055 after 45000 m

百度後得知Selenium和Firefox間存在版本相容問題。(其它瀏覽器相信也是一樣的)

更新selenium到3.4.0後執行測試,依然報錯:
java.lang.IllegalStateException: The path to the driver executable must be set by the webdriver.gecko.driver system property; for more information, see

https://github.com/mozilla/geckodriver. The latest version can be downloaded from https://github.com/mozilla/geckodriver/releases

到上述地址後發現,自Selenium 3後以Geckodriver作為Firefox的預設WebDriver。Geckodriver是一個以代理的形式,讓Selenium程式和基於Gecko的瀏覽器,如Firefox互動的程式。
注:此版本(v0.17.0)的Geckodriver還沒有實現所有功能,不能完美相容Selenium,並且對Firefox v53或更新版本支援更好。

Selenium會從系統環境引數裡尋找Geckodriver,你可以
1,在將其設定在path環境引數中
set PATH=%PATH%;%gecko_path%
2,在程式碼中新增系統變數
System.setProperty(“webdriver.gecko.driver”, “gecko_path”);
3,在啟動java時新增引數
java -Dwebdriver.gecko.driver=%gecko_path% YourApplication
在bash環境中也可以用下面方式設定並找到geckodriver
% export PATH=$PATH:/home/user/bin
% whereis geckodriver
geckodriver: /home/user/bin/geckodriver

本人採取第一種方式,在系統環境變數path中新增Geckodriver的路徑,舊測試程式正確執行。部分輸出:
1498814251334 geckodriver INFO Listening on 127.0.0.1:15516
1498814252998 geckodriver::marionette INFO Starting browser C:\Program Files (x86)\Mozilla Firefox\firefox.exe with args [“-marionette”]
1498814283823 Marionette INFO Listening on port 52325

P.S. 從下面路徑能檢視Selenium支援的FireFox版本:
selenium-server-standalone-3.4.0.jar\org\openqa\selenium\firefox\webdriver.xpi\install.rdf

<!-- Firefox -->
<em:targetApplication>
    <Description>
        <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
        <em:minVersion>3.0</em:minVersion>
        <em:maxVersion>48.0</em:maxVersion>
    </Description>
</em:targetApplication>