How to change the language of a WebDriver?

后端 未结 3 1807
野性不改
野性不改 2020-12-14 02:35

I want to execute my Selenium tests in different languages. Is it possible to change the language of an existing WebDriver at runtime or do I have to recreate the browser in

3条回答
  •  孤街浪徒
    2020-12-14 03:10

    I ended up creating a WebDriverPool that creates one instance for every combination of WebDriver type (e.g. FirefoxDriver.class) and Locale (e.g. en_US). Maybe this is usful for someone.

    public class WebDriverPool {
    
      private Map drivers = new HashMap();
      private List driversInUse = new ArrayList();
    
      public WebDriverPool() {
        Runtime.getRuntime().addShutdownHook(new Thread(){
          @Override
          public void run(){
            for (WebDriver driver : drivers.values())
              driver.close();
    
            if (!driversInUse.isEmpty())
              throw new IllegalStateException("There are still drivers in use, did someone forget to return it? (size: " + driversInUse.size() + ")");
          }
        });
      }
    
      private WebDriver createFirefoxDriver(Locale locale){
        FirefoxProfile profile = new FirefoxProfile();
        profile.setPreference("intl.accept_languages", formatLocale(locale));
        return new FirefoxDriver(profile);
      }
    
      private String formatLocale(Locale locale) {
        return locale.getCountry().length() == 0
          ? locale.getLanguage()
          : locale.getLanguage() + "-" + locale.getCountry().toLowerCase();
      }
    
      /**
       * @param clazz
       * @param locale
       * @return web driver which can be new or recycled
       */
      public synchronized WebDriver getWebDriver(Class clazz, Locale locale){
    
        String key = clazz.getName() + "-" + locale;
    
        if(!drivers.containsKey(key)){
    
          if(clazz == FirefoxDriver.class){
            drivers.put(key, createFirefoxDriver(locale));
          }
    
          // TODO create other drivers here ...
    
          // else if(clazz == ChromeDriver.class){
          //     drivers.put(key, createChromeDriver(locale));
          // }
    
          else{
            throw new IllegalArgumentException(clazz.getName() + " not supported yet!");
          }
        }
    
        WebDriver driver = drivers.get(key);
    
        if(driversInUse.contains(driver))
          throw new IllegalStateException("This driver is already in use. Did someone forgot to return it?");
    
        driversInUse.add(driver);
        return driver;
      }
    
      public synchronized void returnWebDriver(WebDriver driver){
        driversInUse.remove(driver);
      }
    }
    

提交回复
热议问题