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,依赖:
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.3.1</version>
</dependency>
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.<init>(RemoteWebDriver.java:131)
at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:218)
at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:125)
at org.openqa.selenium.firefox.FirefoxDriver.<init>(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依赖
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.8.21</version>
</dependency>
- 注意事项:
- 测试方法上面必须使用@Test注解进行修饰。
- 测试方法必须使用public void 进行修饰,不能带有任何参数。
- 方法名不需要以
test
作为前缀,但是建议测试类使用Test做为类名的后缀,测试方法使用test作为方法名的前缀。
网友评论