并行运行selenium测试,不是为了跨浏览器,而是为了提高速度
我已经看到了很多关于使用Selenium网格并行运行测试的内容,但我只看到了跨浏览器测试的解决方案。我希望所有测试都在Firefox中运行,但我希望有多个实例,当驱动程序完成一个测试时,它会从队列中拖出下一个测试。如果不是并行运行,我的测试速度会非常慢 请让我知道!谢谢大家! 查看一下,如果签出并修改1属性,您将能够使其运行浏览器的多个实例 设置此设置的相关代码为:并行运行selenium测试,不是为了跨浏览器,而是为了提高速度,selenium,parallel-processing,selenium-webdriver,Selenium,Parallel Processing,Selenium Webdriver,我已经看到了很多关于使用Selenium网格并行运行测试的内容,但我只看到了跨浏览器测试的解决方案。我希望所有测试都在Firefox中运行,但我希望有多个实例,当驱动程序完成一个测试时,它会从队列中拖出下一个测试。如果不是并行运行,我的测试速度会非常慢 请让我知道!谢谢大家! 查看一下,如果签出并修改1属性,您将能够使其运行浏览器的多个实例 设置此设置的相关代码为: package com.lazerycode.selenium; import com.opera.core.systems.O
package com.lazerycode.selenium;
import com.opera.core.systems.OperaDriver;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.phantomjs.PhantomJSDriver;
import org.openqa.selenium.phantomjs.PhantomJSDriverService;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.safari.SafariDriver;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.BeforeSuite;
import java.util.*;
import static com.lazerycode.selenium.BrowserType.FIREFOX;
public class SeleniumBase {
private static ResourceBundle _prop = ResourceBundle.getBundle("dev");
private static BrowserType browserType;
private static List<WebDriver> webDrivers = Collections.synchronizedList(new ArrayList<WebDriver>());
private static ThreadLocal<WebDriver> driverForThread = new ThreadLocal<WebDriver>() {
@Override
protected WebDriver initialValue() {
WebDriver driver = loadWebDriver();
webDrivers.add(driver);
return driver;
}
};
@BeforeSuite
public static void setUpTest() {
for (BrowserType browser : BrowserType.values()) {
if (browser.toString().toLowerCase().equals(_prop.getString("browser").toLowerCase())) {
browserType = browser;
}
}
if (browserType == null) {
System.err.println("Unknown browser specified, defaulting to 'Firefox'...");
browserType = FIREFOX;
}
}
@AfterSuite
public static void tearDown() {
for (WebDriver driver : webDrivers) {
driver.quit();
}
}
protected static WebDriver getDriver() {
return driverForThread.get();
}
private static DesiredCapabilities generateDesiredCapabilities(BrowserType capabilityType) {
DesiredCapabilities capabilities;
switch (capabilityType) {
case IE:
capabilities = DesiredCapabilities.internetExplorer();
capabilities.setCapability(CapabilityType.ForSeleniumServer.ENSURING_CLEAN_SESSION, true);
capabilities.setCapability(CapabilityType.ENABLE_PERSISTENT_HOVERING, true);
capabilities.setCapability("requireWindowFocus", true);
break;
case SAFARI:
capabilities = DesiredCapabilities.safari();
capabilities.setCapability("safari.cleanSession", true);
break;
case OPERA:
capabilities = DesiredCapabilities.opera();
capabilities.setCapability("opera.arguments", "-nowin -nomail");
break;
case GHOSTDRIVER:
capabilities = DesiredCapabilities.phantomjs();
capabilities.setCapability("takesScreenshot", true);
//Need to set an environmental variable that points to the location of the PhantomJS Binary for GhostDriver support
capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, System.getProperty("PHANTOMJS_BINARY"));
break;
case CHROME:
capabilities = DesiredCapabilities.chrome();
capabilities.setCapability("chrome.switches", Arrays.asList("--no-default-browser-check"));
HashMap<String, String> chromePreferences = new HashMap<String, String>();
chromePreferences.put("profile.password_manager_enabled", "false");
capabilities.setCapability("chrome.prefs", chromePreferences);
break;
case FIREFOX:
capabilities = DesiredCapabilities.firefox();
break;
case HTMLUNIT:
default:
capabilities = DesiredCapabilities.htmlUnit();
capabilities.setCapability("javascriptEnabled", "true");
}
return capabilities;
}
private static WebDriver loadWebDriver() {
System.out.println("Current Operating System: " + System.getProperties().getProperty("os.name"));
System.out.println("Current Architecture: " + System.getProperties().getProperty("os.arch"));
System.out.println("Current Browser Selection: " + browserType);
//Load standalone executable if required
switch (browserType) {
case CHROME:
if (System.getProperties().getProperty("os.arch").toLowerCase().equals("x86_64") || System.getProperties().getProperty("os.arch").toLowerCase().equals("amd64")) {
if (System.getProperties().getProperty("os.name").toLowerCase().contains("windows")) {
System.setProperty("webdriver.chrome.driver", _prop.getString("binaryRootFolder") + "/windows/googlechrome/64bit/26/chromedriver.exe");
} else if (System.getProperties().getProperty("os.name").toLowerCase().contains("mac")) {
System.setProperty("webdriver.chrome.driver", _prop.getString("binaryRootFolder") + "/osx/googlechrome/64bit/26/chromedriver");
} else if (System.getProperties().getProperty("os.name").toLowerCase().contains("linux")) {
System.setProperty("webdriver.chrome.driver", _prop.getString("binaryRootFolder") + "/linux/googlechrome/64bit/26/chromedriver");
}
} else {
if (System.getProperties().getProperty("os.name").toLowerCase().contains("windows")) {
System.setProperty("webdriver.chrome.driver", _prop.getString("binaryRootFolder") + "/windows/googlechrome/32bit/26/chromedriver.exe");
} else if (System.getProperties().getProperty("os.name").toLowerCase().contains("mac")) {
System.setProperty("webdriver.chrome.driver", _prop.getString("binaryRootFolder") + "/osx/googlechrome/32bit/26/chromedriver");
} else if (System.getProperties().getProperty("os.name").toLowerCase().contains("linux")) {
System.setProperty("webdriver.chrome.driver", _prop.getString("binaryRootFolder") + "/linux/googlechrome/32bit/26/chromedriver");
}
}
break;
case IE:
if (System.getProperties().getProperty("os.arch").toLowerCase().equals("x86_64") || System.getProperties().getProperty("os.arch").toLowerCase().equals("amd64")) {
System.setProperty("webdriver.ie.driver", _prop.getString("binaryRootFolder") + "/windows/internetexplorer/64bit/2.29.0/IEDriverServer.exe");
} else {
System.setProperty("webdriver.ie.driver", _prop.getString("binaryRootFolder") + "/windows/internetexplorer/32bit/2.29.0/IEDriverServer.exe");
}
break;
}
//Instantiate driver object
switch (browserType) {
case FIREFOX:
return new FirefoxDriver(generateDesiredCapabilities(browserType));
case CHROME:
return new ChromeDriver(generateDesiredCapabilities(browserType));
case IE:
return new InternetExplorerDriver(generateDesiredCapabilities(browserType));
case SAFARI:
return new SafariDriver(generateDesiredCapabilities(browserType));
case OPERA:
return new OperaDriver(generateDesiredCapabilities(browserType));
case GHOSTDRIVER:
return new PhantomJSDriver(generateDesiredCapabilities(browserType));
default:
return new HtmlUnitDriver(generateDesiredCapabilities(browserType));
}
}
}
package com.lazerycode.selenium;
导入com.opera.core.systems.OperaDriver;
导入org.openqa.selenium.WebDriver;
导入org.openqa.selenium.chrome.ChromeDriver;
导入org.openqa.selenium.firefox.FirefoxDriver;
导入org.openqa.selenium.htmlunit.HtmlUnitDriver;
导入org.openqa.selenium.ie.InternetExplorerDriver;
导入org.openqa.selenium.phantomjs.PhantomJSDriver;
导入org.openqa.selenium.phantomjs.PhantomJSDriverService;
导入org.openqa.selenium.remote.CapabilityType;
导入org.openqa.selenium.remote.DesiredCapabilities;
导入org.openqa.selenium.safari.SafariDriver;
导入org.testng.annotations.AfterSuite;
导入org.testng.annotations.BeforeSuite;
导入java.util.*;
导入静态com.lazerycode.selenium.BrowserType.FIREFOX;
公共级硒基{
私有静态ResourceBundle_prop=ResourceBundle.getBundle(“dev”);
私有静态BrowserType BrowserType;
私有静态列表webDrivers=Collections.synchronizedList(新的ArrayList());
private static ThreadLocal driverForThread=new ThreadLocal(){
@凌驾
受保护的WebDriver initialValue(){
WebDriver-driver=loadWebDriver();
添加(驱动程序);
返回驱动器;
}
};
@套房前
公共静态无效设置测试(){
对于(BrowserType浏览器:BrowserType.values()){
if(browser.toString().toLowerCase().equals(_prop.getString(“browser”).toLowerCase()){
browserType=浏览器;
}
}
if(browserType==null){
System.err.println(“指定了未知浏览器,默认为'Firefox'…”;
browserType=FIREFOX;
}
}
@事后
公共静态void拆卸(){
for(WebDriver驱动程序:webDrivers){
driver.quit();
}
}
受保护的静态WebDriver getDriver(){
return driverForThread.get();
}
私有静态所需能力生成所需能力(BrowserType capabilityType){
期望的能力;
开关(能力类型){
案例一:
capabilities=DesiredCapabilities.internetExplorer();
Capability.setCapability(CapabilityType.ForSeleniumServer.CLEAN会话,true);
setCapability(CapabilityType.ENABLE\u PERSISTENT\u horing,true);
能力。设置能力(“requireWindowFocus”,true);
打破
案例狩猎:
capabilities=DesiredCapabilities.safari();
capabilities.setCapability(“safari.cleanSession”,true);
打破
案例歌剧:
capabilities=DesiredCapabilities.opera();
setCapability(“opera.arguments”,“-nowin-nomail”);
打破
案例驱动程序:
capabilities=DesiredCapabilities.phantomjs();
能力。设置能力(“takesScreenshot”,true);
//需要设置一个指向PhantomJS二进制文件位置的环境变量以支持GhostDriver
capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_属性,System.getProperty(“PHANTOMJS_二进制”);
打破
外壳铬:
能力=DesiredCapabilities.chrome();
setCapability(“chrome.switches”、Arrays.asList(“--无默认浏览器检查”);
HashMap chromePreferences=新HashMap();
chromePreferences.put(“profile.password\u manager\u enabled”,“false”);
能力。设置能力(“chrome.prefs”,chromePreferences);
打破
案例FIREFOX:
capabilities=DesiredCapabilities.firefox();
打破
案例HTMLUNIT:
违约:
capabilities=DesiredCapabilities.htmlUnit();
setCapability(“javascriptEnabled”,“true”);
}
返回能力;
}
私有静态WebDriver loadWebDriver(){
System.out.println(“当前操作系统:”+System.getProperties().getProperty(“os.name”));
System.out.println(“当前架构:+System.getProperties().getProperty(“os.arch”));
System.out.println(“当前浏览器选择:“+browserType”);
//如果需要,加载独立可执行文件
开关(浏览器型){
外壳铬:
if(System.getProperties().getProperty(“os.arch”).toLowerCase().equals(“x86_64”)| System.getProperties().getProperty(“os.arch”).toLowerCase().equals(“amd64”)){
如果(System.getProperties().getProperty(“os.name”).toLowerCase()包含(“windows”)){
System.setProperty(“webdriver.chrome.driver”,_prop.getString(“binaryRootFolder”)+“/windows/googlechrome/64bit/26/chromedriver.exe”);
}else if(System.getProperties().getProperty(“os.name”).toLowerCase()包含(“mac”)){
System.setProperty(“webdriver.chrome.driver”,_prop.getString(“binaryRootFolder”)+“/osx/googlechrome/64bit/26/chromedriver”);
}else if(System.getProperties().getProperty(“os.name”).toLowerCase()包含(“linux”)){
System.setProperty(“webdriver.chrome.driver”,_prop.getString(“binaryRootFolder”)+“/linux/googlechrome/64bit/26/chromedriver”);
}
}否则{
如果(System.getProperties().getProperty(“os.name”).toLowerCase()包含(“windows”)){
System.setProperty(“webdriver.chrome.driver”,_prop.getString(“binaryRootFolder”)+“/windows/googlechrome/32bit/26/chromedriver.exe”);
}else if(System.getProperties().getProperty(“os.name”).toLowerCase().contai