gpt4 book ai didi

webdriver - 如何更改WebDriver的语言?

转载 作者:行者123 更新时间:2023-12-03 12:16:20 28 4
gpt4 key购买 nike

我想用其他语言执行Selenium测试。是否可以在运行时更改现有WebDriver的语言,还是必须重新创建浏览器实例?

现在,我只使用Firefox,但是稍后我想在其他浏览器中执行测试。

在Firefox中,我将语言设置如下:

FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("intl.accept_languages", "de");
WebDriver driver = new FirefoxDriver(profile);

我还实现了一个WebDriverPool,它包含一个WebDriver实例,以便可以在测试之间共享。如果只能在创建时设置语言,则可以为每个语言环境保存一个实例。

总而言之,我想知道我是否想念这里的东西。为什么更改语言这么难?应该没有像 WebDriver.setAcceptLanguages(Locale)这样的方法吗?

简而言之,我有以下问题:
  • 为什么没有WebDriver.setAcceptLanguages(Locale)
  • 如何更改直接WebDrivers的语言?
  • 我可以在运行时更改语言吗?
  • 你们是如何实现WebDriverPool的?还是每次都重新创建它们?
  • 最佳答案

    我最终创建了一个WebDriverPool,该WebDriverPool为WebDriver类型(例如FirefoxDriver.class)和语言环境(例如en_US)的每种组合都创建了一个实例。也许这对某人有用。

    public class WebDriverPool {

    private Map<String, WebDriver> drivers = new HashMap<String, WebDriver>();
    private List<WebDriver> driversInUse = new ArrayList<WebDriver>();

    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<? extends WebDriver> 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);
    }
    }

    关于webdriver - 如何更改WebDriver的语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9822717/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com