多个(并发)测试执行的多个浏览器配置文件?

时间:2017-03-13 10:23:10

标签: java selenium webdriver testng

多个(并发)测试执行的多个浏览器配置文件?

  1. 这可能吗?
  2. 例如,我可以同时执行两个测试,但是当两个测试在同一个浏览器中同时打开时,它们似乎共享相同的cookie。
  3. 请找到下面列出的主浏览器工厂类,有人可以建议更改我的代码的最佳方法,或者是否能够达到我的目标所需的设置?
  4. 感谢您的帮助

    public class BrowserFactory implements ISuiteListener {
        private static WebDriver webdriver;
    
        public static WebDriver getDriver() throws Exception {
            try {
                Properties p = new Properties();
                FileInputStream fi = new FileInputStream(Constant.CONFIG_PROPERTIES_DIRECTORY);
                p.load(fi);
    
                String browserName = p.getProperty("browser");
                switch (browserName) {
    
                //firefox setup
                case "firefox":
                    if (null == webdriver) {
                        System.setProperty("webdriver.gecko.driver", Constant.GECKO_DRIVER_DIRECTORY);
                        webdriver = new FirefoxDriver();
                    }
                    break;
    
               //chrome setup
                case "chrome":
                    if (null == webdriver) {
                        System.setProperty("webdriver.chrome.driver", Constant.CHROME_DRIVER_DIRECTORY);
                        DesiredCapabilities caps = DesiredCapabilities.chrome();
                        LoggingPreferences logPrefs = new LoggingPreferences();
                        logPrefs.enable(LogType.BROWSER, Level.ALL);
                        caps.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);
                        webdriver = new ChromeDriver(caps);
                    }
                    break;
    
               //IE setup   
                case "ie":
                    if (null == webdriver) {
                        System.setProperty("webdriver.ie.driver", Constant.IE_DRIVER_DIRECTORY);
                        webdriver = new InternetExplorerDriver();
                    }
                    break;
                }
            } catch (Exception e) {
                System.out.println("Unable to load browser! - Exception: " + e.getMessage());
            }
            return webdriver;
        }
    
    
    
        @AfterClass
        public void quitDriver() throws Exception {
            if (null != webdriver) {
                getDriver().manage().deleteAllCookies();
                webdriver.quit();
                webdriver = null;
            }
    
            // Output the time when a test class has ended
            String tempTimeEndClass = new SimpleDateFormat("hh.mm.ss").format(new Date());
            System.out.println("\nTEST CLASS END TIME: " + tempTimeEndClass);
        }
    }
    

1 个答案:

答案 0 :(得分:2)

  1. 是的,当然有可能!
  2. 他们共享相同的cookie,因为您正在创建的WebDriver实例是静态的,尝试删除静态修饰符,以便在每次启动webdriver时获得一个唯一的实例。
  3.   

    公共网络驱动程序驱动程序; public WebDriver getDriver()抛出异常   {}

    如果上述内容不够,您想对配置文件执行其他操作;只需将其作为参数通过xml或方法中的String var传递:

    currentProfile = "user-data-dir=/path/to/your/custom/profile";
    ChromeOptions options = new ChromeOptions();
    options.addArguments(currentProfile);
    

    再次,小心这里currentProfile需要是一个实例变量而不是静态变量!

    祝你好运!