优化思路如下:
在web测试中,通常会进行浏览器兼容性的测试。而web自动化中提供了IE、Firefox和Chrome三种浏览器的驱动,下面详细讲述下如何将这三种浏览器的创建写在同一个方法中,并在自动化测试执行前执行该方法。
使用testng来进行测试用例的管理,在此处使用了@BeforeSuite注解和@Parameter注解,具体使用方法请自行学习。
将浏览器的选择写到一个方法中间,需要对浏览器类型、driver地址和selenium版本都进行判断,判断selenium版本是因为firefox,当2.x版本的selenium的时候不需要dirver,当3.x版本的selenium的时候浏览器和dirver需要保持一致性。
在类中做一个配置,使用testNG中的@Parameter注解,该注解可以写在testng的xml文件中,然后在使用的时候,将注解中的参数对应值(是一个数组)注入到方法中(形参,一一对应),在testng.xml文件中定义如下(此处文件也可以为Excel或者properties,需要进行解析后再传入方法中,此处不做说明)
<!-- 浏览器的类型:ie firefox chrome -->
<parameter name="browserType" value="Firefox"></parameter>
<!-- 驱动文件的路径 -->
<!-- ie驱动地址 src/test/resources/IEDriverServer.exe-->
<!-- chrome驱动地址 src/test/resources/chromedriver.exe -->
<!-- firefox驱动地址 src/test/resources/geckodriver.exe -->
<parameter name="driverPath" value="src/test/resources/geckodriver.exe"></parameter>
<!-- selenium版本 2.x 3.x-->
<parameter name="seleniumVersion" value="2.x"></parameter>
如果需要更换浏览器的driver,请将driver的路径写在第二个<parameter></paremeter>标签内的value属性内
优化代码如下:
@BeforeSuite
@Parameters(value = { "browserType", "driverPath", "seleniumVersion" })
public void beforeSuite(String browserType, String driverPath, String seleniumVersion) {
// 小写的浏览器类型字符串 IE--》ie
String browserTypeLowerCase = browserType.toLowerCase();
logger.info("开始创建驱动");
if (("ie").equals(browserTypeLowerCase)) {
// IE
// 1:驱动文件找不到的异常
System.setProperty("webdriver.ie.driver", driverPath);
// 创建一个设置对象,用来设置创建ie驱动时的各种设置
DesiredCapabilities capabilities = new DesiredCapabilities();
// 2:取消IE安全设置(忽略IE的Protected Mode的设置)
capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
// 3:忽略浏览器的页面缩放设置
capabilities.setCapability(InternetExplorerDriver.IGNORE_ZOOM_SETTING, true);
// 4:设置一个初始化页面,防止window对象丢失
capabilities.setCapability(InternetExplorerDriver.INITIAL_BROWSER_URL, "http://www.baidu.com");
//创建一个ie驱动
driver = new InternetExplorerDriver(capabilities);
logger.info("创建IE驱动完成");
}
//做谷歌浏览器的测试
else if (("chrome").equals(browserTypeLowerCase)) {
//设置驱动
System.setProperty("webdriver.chrome.driver", driverPath);
//创建一个谷歌的webdriver驱动对象
driver = new ChromeDriver();
System.out.println("创建chrome驱动完成");
} else if (("firefox").equals(browserTypeLowerCase)) {
//火狐浏览器可执行文件的设置,因为不是安装在默认的路径下
System.setProperty("webdriver.firefox.bin", "D:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe");
//如果selenium为3.x的版本,需要进行驱动文件设置
if ("3.x".equals(seleniumVersion)) {
// 3.x的selenium的驱动
System.setProperty("webdriver.gecko.driver", driverPath);
}
//创建一个火狐的driver
driver = new FirefoxDriver();
System.out.println("创建火狐驱动完成");
}
}