Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
并行运行selenium测试,不是为了跨浏览器,而是为了提高速度_Selenium_Parallel Processing_Selenium Webdriver - Fatal编程技术网

并行运行selenium测试,不是为了跨浏览器,而是为了提高速度

并行运行selenium测试,不是为了跨浏览器,而是为了提高速度,selenium,parallel-processing,selenium-webdriver,Selenium,Parallel Processing,Selenium Webdriver,我已经看到了很多关于使用Selenium网格并行运行测试的内容,但我只看到了跨浏览器测试的解决方案。我希望所有测试都在Firefox中运行,但我希望有多个实例,当驱动程序完成一个测试时,它会从队列中拖出下一个测试。如果不是并行运行,我的测试速度会非常慢 请让我知道!谢谢大家! 查看一下,如果签出并修改1属性,您将能够使其运行浏览器的多个实例 设置此设置的相关代码为: package com.lazerycode.selenium; import com.opera.core.systems.O

我已经看到了很多关于使用Selenium网格并行运行测试的内容,但我只看到了跨浏览器测试的解决方案。我希望所有测试都在Firefox中运行,但我希望有多个实例,当驱动程序完成一个测试时,它会从队列中拖出下一个测试。如果不是并行运行,我的测试速度会非常慢

请让我知道!谢谢大家!

查看一下,如果签出并修改1属性,您将能够使其运行浏览器的多个实例

设置此设置的相关代码为:

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