项目开发到一定阶段,随着版本的不断迭代,功能不断增加,新增的功能是否影响已上线的模块,在每次版本迭代上线时都有大量的回归测试工作需要做,安排测试人员每个模块测过去费时费力,如何选择一个好的自动化测试工具,提高测试效率呢?selenium就是一个好的选择,下面就介绍一下我用selenium搭建Firefox,Chrome,IE三个主流平台测试环境的过程。
我的本地环境是win7 64位,Firefox 57,Chrome 68,IE 11,所以我选择了selenium 3.13.0版本。
1.下载各浏览器的WebDriver驱动。
Firefox:https://github.com/mozilla/geckodriver/releases
下载对应的v0.21.0版本
Chrome:https://chromedriver.storage.googleapis.com/index.html
下载对应的v2.40版本(版本对照表可以上网搜索一下)
ChromeDriver v2.40 (2018-06-07)----------Supports Chrome v66-68
ChromeDriver v2.39 (2018-05-30)----------Supports Chrome v66-68
IE:http://selenium-release.storage.googleapis.com/index.html
选择和selenium一样的版本号的IEDriverServer,分32位系统和64位系统
IEDriverServer_x64_3.13.0.zip
2.将下载的WebDriver放到浏览器文件目录中,也可以放在其他目录,后续指定驱动的路径即可
3.创建maven项目,在pom文件中引入selenium-java
org.seleniumhq.selenium
selenium-java
3.13.0
下载成功后会有这些jar包
4.编写测试类
package iipTest;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
/**
* 名称:类的中文名称
* 功能:对类的功能进行说明
*
*
* @since JDK 1.7
* @see
* @author Louka
*/
public class MySelenium {
/**
* 名称:方法的中文名称
*
* 说明:说明方法的功能和使用要点
*
*
* @param args
*
* @see
*/
public static void main(String[] args) {
int test = 1;
if (test == 1) {
testFirefox();
} else if (test == 2) {
testChrome();
} else if (test == 3) {
testIE();
}
}
public static void testFirefox() {
// 添加Firefox的webdriver
System.setProperty("webdriver.gecko.driver", "D:\\Program Files\\Mozilla Firefox\\geckodriver.exe");
// 如果你的 FireFox 没有安装在默认目录,那么必须在程序中设置
System.setProperty("webdriver.firefox.bin", "D:\\Program Files\\Mozilla Firefox\\firefox.exe");
// 创建一个 FireFox 的浏览器实例
WebDriver driver = new FirefoxDriver();
// 让浏览器访问 Baidu
driver.get("http://www.baidu.com");
// 获取 网页的 title
System.out.println("1 Page title is: " + driver.getTitle());
// 关闭浏览器
driver.quit();
}
public static void testChrome() {
// 添加Chrome的webdriver
System.setProperty("webdriver.chrome.driver",
"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe");
// 或通过相对路径设置
// System.setProperty("webdriver.chrome.driver","src/main/resources/drivers/chrome/v2.40/chromedriver.exe");
// 如果你的 Chrome 没有安装在默认目录,那么必须在程序中设置
System.setProperty("webdriver.chrome.bin", "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe");
// 创建一个 Chrome 的浏览器实例
WebDriver driver = new ChromeDriver();
// 让浏览器访问 Baidu
driver.get("http://www.baidu.com");
// 获取 网页的 title
System.out.println("1 Page title is: " + driver.getTitle());
// 关闭浏览器
driver.quit();
}
public static void testIE() {
// 添加IE的webdriver
System.setProperty("webdriver.ie.driver", "C:\\Program Files\\Internet Explorer\\IEDriverServer.exe");
// 创建一个 IE 的浏览器实例
WebDriver driver = new InternetExplorerDriver();
// 让浏览器访问 Baidu
driver.get("http://www.baidu.com");
// 获取 网页的 title
System.out.println("1 Page title is: " + driver.getTitle());
// 关闭浏览器
driver.quit();
}
}
这里我的Firefox和Chrome都没有安装在默认路径下 所以都添加了属性设置指定浏览器bin文件路径,IE是系统默认路径所以没有添加bin文件路径属性
本次测试的效果是,打开浏览器,访问百度页面,获取页面的title,关闭浏览器。
这只是简单的测试示例,更多功能可以参考
selenium中文网:http://www.selenium.org.cn/
或相关学习博客:http://www.cnblogs.com/moonpool/tag/Selenium/
学习更丰富的用法。
测试过程中容易碰到的问题:
1.驱动版本不匹配,无法启动浏览器,下载对应版本驱动替换
2.浏览器安装在非默认路径,需要添加webdrive.xxx.bin属性指定浏览器路径
3.Firefox如果碰到无法访问127.0.0.1问题,可以在host文件第一行添加127.0.0.1 localhost解决
4.IE浏览器碰到安全性问题无法打开,可以在浏览器安全选项中将4个保护模式关闭
-----2018.08.03-----
代码改进,为了适配不同测试人员本地的浏览器版本,将浏览器驱动适配参数化
package iipTest;
import java.io.FileInputStream;
import java.util.Properties;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
/**
* 名称:类的中文名称
* 功能:对类的功能进行说明
*
*
* @since JDK 1.7
* @see
* @author Louka
*/
public class MySelenium {
private Properties p;
/**
* 构造方法: MySelenium.
*
* @param p
*/
public MySelenium() {
this.p = new Properties();
FileInputStream is;
try {
is = new FileInputStream("src/main/resources/iiptest.properties");
p.load(is);
} catch (Exception e1) {
e1.printStackTrace();
}
}
public void testFirefox() {
// 添加Firefox的webdriver
System.setProperty("webdriver.gecko.driver",
"src/main/resources/drivers/firefox/" + p.getProperty("firefox_driver_version") + "/geckodriver.exe");
// 如果你的 FireFox 没有安装在默认目录,那么必须在程序中设置
System.setProperty("webdriver.firefox.bin", p.getProperty("firefox_bin"));
// 创建一个 FireFox 的浏览器实例
WebDriver driver = new FirefoxDriver();
// 让浏览器访问 Baidu
driver.get("http://www.baidu.com");
// 获取 网页的 title
System.out.println("1 Page title is: " + driver.getTitle());
// 关闭浏览器
driver.quit();
}
public void testChrome() {
// 添加Chrome的webdriver
System.setProperty("webdriver.chrome.driver",
"src/main/resources/drivers/chrome/" + p.getProperty("chrome_driver_version") + "/chromedriver.exe");
// 如果你的 Chrome 没有安装在默认目录,那么必须在程序中设置
System.setProperty("webdriver.chrome.bin", p.getProperty("chrome_bin"));
// 创建一个 Chrome 的浏览器实例
WebDriver driver = new ChromeDriver();
// 让浏览器访问 Baidu
driver.get("http://www.baidu.com");
// 获取 网页的 title
System.out.println("1 Page title is: " + driver.getTitle());
// 关闭浏览器
driver.quit();
}
public void testIE() {
// 添加IE的webdriver
System.setProperty("webdriver.ie.driver", "src/main/resources/drivers/ie/" + p.getProperty("ie_driver_version")
+ "/" + p.getProperty("ie_win_bit") + "/IEDriverServer.exe");
// 创建一个 IE 的浏览器实例
WebDriver driver = new InternetExplorerDriver();
// 让浏览器访问 Baidu
driver.get("http://www.baidu.com");
// 获取 网页的 title
System.out.println("1 Page title is: " + driver.getTitle());
// 关闭浏览器
driver.quit();
}
}
通过junitTest调用测试代码
@Test
public void test() {
MySelenium s = new MySelenium();
s.testFirefox();
}
然后增加iiptest.properties文件
firefox_driver_version=v0.21.0
firefox_bin=D:/Program Files/Mozilla Firefox/firefox.exe
chrome_driver_version=v2.40
chrome_bin="C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
ie_driver_version=v3.13
ie_win_bit=x64
注意:这里的Firefox路径配置和chrome使用不同的斜杠
文档路径入下图所示:
这样可以在项目中预置多个版本的驱动,测试人员只需改动本地properties文件即可使用,测试代码不需要修改