2

我目前在使用Java的Maven中使用webdriver創建硒自動化。 現在用於初始化瀏覽器如Chrome和IE我必須設置系統屬性,如使Maven項目中的System.setProperty平臺獨立於Selenium測試

System.setProperty("webdriver.chrome.driver", "F:\\somewhereintheworkingdir\\drivers\chromedriver.exe");

現在,我的交付是JAR的條款。我使用Maven的,所以這是目前正在主>資源>驅動程序> chromedriver.exe

SO封裝這將是unders根>驅動程序> chromedriver.exe

後,那麼如何使系統屬性,它會在這兩種情況下運行?

我研究了一些常量,如java.class.pathjava.file.seperator等,但我不知道他們將如何在這裏有用的情況下。

我希望有人能幫助我。

+0

可執行文件無法在jar內運行。您必須將其從jar中解壓縮到文件系統中,然後將該屬性設置爲該位置。 – maba

+0

嗨馬壩。你搖滾。好吧,所以你的意思是說,如果我有一個jar文件的exe文件,它不會運行?我想如果是這種情況,那麼我可以解決問題,因爲defult位置是項目根目錄。 –

+1

你將不得不解壓exe文件**或**將其放在一邊。 – maba

回答

3

我建議在看看這個:

https://github.com/Ardesco/Selenium-Maven-Template

相關的部分是它使用這個插件的POM:

<properties> 
    <standalone.binary.root.folder>${project.basedir}/selenium_standalone_binaries</standalone.binary.root.folder> 
</properties> 

<profiles> 
    <profile> 
     <id>selenium-tests</id> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>com.lazerycode.selenium</groupId> 
        <artifactId>driver-binary-downloader-maven-plugin</artifactId> 
        <version>0.9.2</version> 
        <configuration> 
         <rootStandaloneServerDirectory>${standalone.binary.root.folder}</rootStandaloneServerDirectory> 
         <downloadedZipFileDirectory>${project.basedir}/selenium_standalone_zips</downloadedZipFileDirectory> 
         <customRepositoryMap>${project.basedir}/RepositoryMap.xml</customRepositoryMap> 
        </configuration> 
        <executions> 
         <execution> 
          <goals> 
           <goal>selenium</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles> 

,並在基類中它拉進二進制文件的位置:

private static ResourceBundle _prop = ResourceBundle.getBundle("dev"); 
//Load standalone executable if required 
switch (browserType) { 
    case CHROME: 
     if (System.getProperties().getProperty("os.arch").toLowerCase().equals("x86_64") || System.getProperties().getProperty("os.arch").toLowerCase().equals("amd64")) { 
      if (System.getProperties().getProperty("os.name").toLowerCase().contains("windows")) { 
       System.setProperty("webdriver.chrome.driver", _prop.getString("binaryRootFolder") + "/windows/googlechrome/64bit/26/chromedriver.exe"); 
      } else if (System.getProperties().getProperty("os.name").toLowerCase().contains("mac")) { 
       System.setProperty("webdriver.chrome.driver", _prop.getString("binaryRootFolder") + "/osx/googlechrome/64bit/26/chromedriver"); 
      } else if (System.getProperties().getProperty("os.name").toLowerCase().contains("linux")) { 
       System.setProperty("webdriver.chrome.driver", _prop.getString("binaryRootFolder") + "/linux/googlechrome/64bit/26/chromedriver"); 
      } 
     } else { 
      if (System.getProperties().getProperty("os.name").toLowerCase().contains("windows")) { 
       System.setProperty("webdriver.chrome.driver", _prop.getString("binaryRootFolder") + "/windows/googlechrome/32bit/26/chromedriver.exe"); 
      } else if (System.getProperties().getProperty("os.name").toLowerCase().contains("mac")) { 
       System.setProperty("webdriver.chrome.driver", _prop.getString("binaryRootFolder") + "/osx/googlechrome/32bit/26/chromedriver"); 
      } else if (System.getProperties().getProperty("os.name").toLowerCase().contains("linux")) { 
       System.setProperty("webdriver.chrome.driver", _prop.getString("binaryRootFolder") + "/linux/googlechrome/32bit/26/chromedriver"); 
      } 
     } 
     break; 
    case IE: 
     if (System.getProperties().getProperty("os.arch").toLowerCase().equals("x86_64") || System.getProperties().getProperty("os.arch").toLowerCase().equals("amd64")) { 
      System.setProperty("webdriver.ie.driver", _prop.getString("binaryRootFolder") + "/windows/internetexplorer/64bit/2.29.0/IEDriverServer.exe"); 
     } else { 
      System.setProperty("webdriver.ie.driver", _prop.getString("binaryRootFolder") + "/windows/internetexplorer/32bit/2.29.0/IEDriverServer.exe"); 
     } 
     break; 
} 

You als o需要在src/main/resources中有一個屬性文件(必須在main中,而不是測試中),maven可以在構建時更新以傳入在命令行中覆蓋的POM中設置的屬性。

這個文件應該是這樣的:

binaryRootFolder=${standalone.binary.root.folder} 

做會複製鏈接到該項目在這個答案的開始,只是運行的最簡單的事情:

mvn verify -Pselenium-tests 

,將顯示你的一切工作,並給你一個良好的基礎,從開始。