Selenium+FireFox+Java 搭建与版本选择

1 浏览器驱动下载与安装

1.1 下载地址

a. chrome

下载之前,先检查自己浏览器的版本,根据浏览器版本选择Driver的版本。最新的几个版本对应如下。

chrome chromeDriver
v66-68 v2.40 v2.39
v65-67 v2.38
v64-66 v2.37
v63-65 v2.36
v62-64 v2.35
v61-63 v2.34
v60-62 v2.33
v59-61 v2.32
v58-60 v2.31

ChromeDriver官网无法访问,镜像下载地址:

http://npm.taobao.org/mirrors/chromedriver/

b. Firefox

火狐浏览器驱动下载地址:

https://github.com/mozilla/geckodriver/releases/

在下载页面找到这样一句话,指出了geckodriver对应的浏览器版本。

  • Geckodriver 0.21.0 needs
    • Firefox 57 (and greater)
    • Selenium 3.11 (and greater)

请大家在在下之前阅读文档,根据自己的系统选择相应的版本下载。

1.2 驱动安装

两种方式:

1、把最新的geckodriver.exe放到java安装目录/bin目录下,在代码中定义:

WebDriver driver = new FirefoxDriver();

2、如果geckodriver.exe放置在一个任意目录,比如 c:\webdriver\geckodriver.exe,然后代码中定义:

 String firefoxdriver = "c:\\webdriver\\geckodriver.exe";
 System.setProperty("webdriver.gecko.driver",firefoxdriver);
 WebDriver driver = new FirefoxDriver(); 

2 selenium安装

建议使用maven,依赖:


    org.seleniumhq.selenium
    selenium-java
    3.3.1

3 版本冲突

选择版本前,强烈建议阅读下载Geckodriver页面的官方说明,指出了版本选择的规则。能少很多走弯路。
这里,笔者贴出自己搭建时候遇到的问题,供大家参考。

3.1 JDK 1.7.0_67 + FireFox 61.0.1 + geckodriver 0.21.0 + selenium 3.3.1

异常:执行代码的jdk版本低于编译的jdk版本

Exception in thread "main" java.lang.UnsupportedClassVersionError: org/openqa/selenium/WebDriver : Unsupported major.minor version 52.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:190)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:122)

3.2 JDK 1.8.0_131 + FireFox 61.0.1 + geckodriver 0.21.0 + selenium 3.3.1

升级了JDK版本,依然报异常:

Exception in thread "main" org.openqa.selenium.SessionNotCreatedException: Unable to create new remote session. desired capabilities = Capabilities [{moz:firefoxOptions={binary=Optional.empty, args=[], legacy=null, logLevel=null, prefs={}, profile=null}}], required capabilities = Capabilities [{moz:firefoxOptions={binary=Optional.empty, args=[], legacy=null, logLevel=null, prefs={}, profile=null}}]
Build info: version: '3.3.1', revision: '5234b325d5', time: '2017-03-10 09:10:29 +0000'
System info: host: 'JRA11379A282DD', ip: '10.9.1.30', os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.8.0_131'
Driver info: driver.version: FirefoxDriver
    at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:126)
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:141)
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:82)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:604)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:244)
    at org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:131)
    at org.openqa.selenium.firefox.FirefoxDriver.(FirefoxDriver.java:218)
    at org.openqa.selenium.firefox.FirefoxDriver.(FirefoxDriver.java:125)
    at org.openqa.selenium.firefox.FirefoxDriver.(FirefoxDriver.java:121)

3.3 JDK 1.8.0_131 + FireFox 61.0.1 + geckodriver 0.21.0 + selenium 3.11.0

可用版本

在该配置下,笔者采用的chrome版本为v68,chromeDriver版本为v2.40

根据官方文档,总结版本选择规则:

  • Geckodriver 0.21.0 needs
    • Firefox 57 (and greater)
    • Selenium 3.11 (and greater)
  • selenium 3.0 needs java 8(and greater)

4 引入testNG测试框架

  • maven依赖

    org.testng
    testng
    6.8.21

  • 注意事项:
  1. 测试方法上面必须使用@Test注解进行修饰。
  2. 测试方法必须使用public void 进行修饰,不能带有任何参数。
  3. 方法名不需要以test作为前缀,但是建议测试类使用Test做为类名的后缀,测试方法使用test作为方法名的前缀。

在测试中遇到No tests were found以及empty test suite的报错,查了很久才发现方法使用了private进行修饰,找不到方法

更多信息,前往笑笑的blog

你可能感兴趣的:(Selenium+FireFox+Java 搭建与版本选择)