在进行 web 网页测试的时候,往往需要测试多个浏览器的兼容性,那么如何实现一个自动化用例多浏览器运行呢?总不能每种浏览器都写一遍吧?那样重复性工作太多,而且不利于维护,本来将以 chrome、firefox 和 IE 为例进行讲解。
驱动下载地址
● chromedriver:https://chromedriver.storage.googleapis.com/index.html,根据 chrome 浏览器的版本下载对应版本的chromedriver,如果版本不匹配,会导致启动 chrome 浏览器 失败。
● geckodriver:firefox 浏览器通过 geckodriver 启动,下载地址:https://registry.npmmirror.com/binary.html?path=geckodriver/,geckodriver 的版本也要与 firefox 浏览器的版本相匹配,否则会启动失败。
● IEDriverServer:http://selenium-release.storage.googleapis.com/index.html(selenium也在此目录下下载),与firefox、chrome 不同,IE浏览器要想通过 IEDriverServer 启动成功,则 IEDriverServer 与 selenium 版本要匹配。
各浏览器驱动下载完成后,下面进入正题。
如何实现多浏览器运行
驱动下载完成,准备工作做好了。一般我们写单浏览器用例是这样的,以 chrome 为例:
@Test
public void testXxx(String dri) {
System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
ChromeOptions chromeOptions = new ChromeOptions();
WebDriver driver = new ChromeDriver(chromeOptions);
// 清除cache和cookies
driver.manage().deleteAllCookies();
driver.navigate().refresh();
driver.manage().window().maximize();
driver.get("https://www.baidu.com/");
}
这样就启动浏览器进入到百度,那现在我要在 firefox 和 IE 上也测试一下,怎么弄呢?我不想每个浏览器都写一遍上面的代码,这个情况下我们很容易想到是否可以参数化,把浏览器作为一个参数来处理呢。下面就是找一个支持参数化的测试框架,我用的是 Junit5(其它测试框架我没用过,不熟,反正原理都是一样的),那去官网(https://junit.org/junit5/docs/current/user-guide/)上看看 Junit5 可不可以满足我们的需求,很快就看到了:
从字面意思可以看出这个就是我们要找的东西,表示参数化测试,点进去看看:
是它,就是它,我们要的东西!!!@ParameterizedTest表示这是参数化用例,@ValueSource 则是传参,依葫芦画瓢,我们可以改版下上面的代码:
@ParameterizedTest
@ValueSource(strings={"ChromeDriver","FireFoxDriver","IEDriverServer"})
public void testXxx(String dri) {
WebDriver driver;
if(dri.equals("ChromeDriver") ) {
System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
ChromeOptions chromeOptions = new ChromeOptions();
driver = new ChromeDriver(chromeOptions);
}else if(dri.equals("FireFoxDriver")){
System.setProperty("webdriver.gecko.driver", "geckodriver.exe");
driver = new FirefoxDriver();
}else if(dri.equals("IEDriverServer")){
System.setProperty("webdriver.ie.driver", "IEDriverServer.exe");
driver = new InternetExplorerDriver();
}
// 清除cache和cookies
driver.manage().deleteAllCookies();
driver.navigate().refresh();
driver.manage().window().maximize();
driver.get("https://www.baidu.com/");
}
运行一下试试:
成功运行,完结,撒花。