Selenium网格错误:会话[(null externalkey)]不可用,并且不在最后1000个终止的会话中

时间:2018-03-22 10:32:11

标签: timeout ip

我们正在selenium网格中执行多个测试用例,其中集线器连接到2台机器,但每次运行网格时,都会出错。

创建webdriver时出错。异常消息:

  

会话[(null externalkey)]不可用,并且不在最后1000个终止的会话中。   活动会话是[]   命令持续时间或超时:0毫秒

代码:

private static List<WebDriver> m_listOfWebDrivers = Collections.synchronizedList(new ArrayList<WebDriver>());
    private static ThreadLocal<WebDriver> m_driverForThread = new ThreadLocal<WebDriver>() {
        @Override
        protected WebDriver initialValue() {
            WebDriver driver = null;
            try {
                driver = loadDesktopDriver();
            } catch (Exception e) {
                e.printStackTrace();
            }

            Log.info("Initializing Webdriver");
            m_listOfWebDrivers.add(driver);
            return driver;
        }
    }; 
    protected static WebDriver loadDesktopDriver() throws Exception {

        WebDriver driver = null;
        Log.debug("Get Driver for Browser : " + m_browser);

        try {
            if (!m_runOnBrowserStack && null == m_browser) {
                throw new IllegalArgumentException("Browser value should be provided for test");
            }
            driver = getNewDriver(m_browser, "", "", m_context);


            **driver.manage().timeouts().implicitlyWait(50000, TimeUnit.MILLISECONDS);**    /* this was added later, still didnt work*/


        } catch (Exception e) {
            Log.fatal("Error creating a webdriver. Exception message : " + e.getMessage());
            throw e;
        }

        return driver;
    }
    public static WebDriver getNewDriver(String browserName, String browserVersion, String platform,
            ITestContext context)
            throws IOException, ComboBoxElementException, TextBoxElementException, ElementException, PageException {

        LoggingPreferences logPrefs = new LoggingPreferences();
        logPrefs.enable(LogType.BROWSER, Level.ALL);

        /**
         * These capabilities will need to be re assigned according to the
         * browser we are going to be launched. This is required in case of
         * running on Grid only but keeping it same normal execution to avoid
         * code redundancy.
         */
        DesiredCapabilities desiredCapabilities = null;

        if (m_runOnBrowserStack) {

            desiredCapabilities = new DesiredCapabilities();

            JSONObject envs = (JSONObject) m_bsConfig.get("environment");
            String bsEnvironment = context.getCurrentXmlTest().getParameter("bsEnvironment");
            String testName = context.getCurrentXmlTest().getName();
            Log.info("Environmnet details for Test [" + testName + "] is : " + bsEnvironment);
            if (null == bsEnvironment)
                throw new PageException(
                        "Environment name does not present in XML or not passed from CLI : " + bsEnvironment);
            Map<String, String> envCapabilities = (Map<String, String>) envs.get(bsEnvironment);
            if (null == envCapabilities)
                throw new PageException("Environment name does not present in Config file : " + bsEnvironment);
            Iterator<Entry<String, String>> it = envCapabilities.entrySet().iterator();
            while (it.hasNext()) {
                Map.Entry<String, ?> pair = (Map.Entry<String, ?>) it.next();
                desiredCapabilities.setCapability(pair.getKey().toString(), pair.getValue().toString());
            }

            Map<String, String> commonCapabilities = (Map<String, String>) m_bsConfig.get("capabilities");
            it = commonCapabilities.entrySet().iterator();
            while (it.hasNext()) {
                Map.Entry<String, ?> pair = (Map.Entry<String, ?>) it.next();
                if (desiredCapabilities.getCapability(pair.getKey().toString()) == null) {
                    desiredCapabilities.setCapability(pair.getKey().toString(), pair.getValue().toString());
                }
            }

            browserName = (String) desiredCapabilities.getCapability("browser");
        }

        DriverSupportedBrowsers driverType = DriverSupportedBrowsers.valueOf(browserName.toUpperCase());

        if (null != m_gridUrl && !m_gridUrl.isEmpty()) {

            m_gridUrl += "/wd/hub";
        }
    switch (driverType) {
    case CHROME:
    String chromeDriverPath = driverHome + File.separator + FrameworkConstants.chromeDriverExeName;

            if (m_runOnBrowserStack || CommonHelper.isFileExists(chromeDriverPath)) {

                if (!m_runOnBrowserStack)
                    desiredCapabilities = DesiredCapabilities.chrome();

                desiredCapabilities.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);

                ChromeOptions options = new ChromeOptions();
                options.addArguments("--start-maximized");
                options.addArguments("--disable-extensions");

                // To start browser in private mode
                // options.addArguments("incognito");

                desiredCapabilities.setCapability(ChromeOptions.CAPABILITY, options);

                System.setProperty("webdriver.chrome.driver", chromeDriverPath);

                if (null != m_gridUrl && !m_gridUrl.isEmpty()) {// for runs on
                                                                // grid

                    return new RemoteWebDriver(new URL(m_gridUrl), desiredCapabilities);

                } else
                    return new RemoteWebDriver(service.getUrl(), desiredCapabilities);    /* The code fails here generally with the failure*/

            } else {
                throw new FileNotFoundException(
                        "Chrome Driver path : " + chromeDriverPath + "\n\"" + FrameworkConstants.chromeDriverExeName
                                + "\" not found in driver home path declared in System Environment Variable \""
                                + driverHome + "\"");
            }
    @Parameters({ "bsEnvironment" })
    @BeforeMethod(alwaysRun = true)
    public void initialize(ITestContext context, Method method, @Optional String bsEnvironment)
            throws IOException {

        String customer = context.getCurrentXmlTest().getParameter("customer");
        String testName = context.getCurrentXmlTest().getName();
        setTestName(testName);
        String methodName = "";
        m_testMethod = method.getName();
        methodName = testName + "_" + method.getName() + "_" + customer;
        CommonHelper.renameRetryLog(m_logDir, methodName);
        Log.setLog(m_logDir, methodName);

        m_context = context;
        if (m_runOnBrowserStack) {

            if (null == context.getCurrentXmlTest().getParameter("bsEnvironment")
                    || context.getCurrentXmlTest().getParameter("bsEnvironment").isEmpty()) {
                Log.info("Adding bsEnvironment parameter for run on BrowserStack");
                context.getCurrentXmlTest().addParameter("bsEnvironment", bsEnvironment);
            }
        }

        try {

            WebDriver driver = getDriverInstanceForThread();

            if (null == driver)
                throw new PageException("Driver is null. Initialization problem!!");

            // Logging browser name and version parameters, driver and thread
            // instances

            String browserName = null;
            String browserVersion = null;

            try {

                Capabilities webDriverCapablities = ((RemoteWebDriver) driver).getCapabilities();
                browserName = webDriverCapablities.getBrowserName();
                browserVersion = webDriverCapablities.getVersion();

            } catch (ClassCastException e) {

                Log.error("Unable to cast driver to RemoteWebdriver");
                browserName = m_browser;
                browserVersion = "NA";
            }

            Log.info("\n ****************** START OF TEST CASE  " + method.getName() + "   " + customer + ":"
                    + browserName + ":" + browserVersion + "\t THREAD:" + Thread.currentThread().getId()
                    + "\t WEBDRIVER:" + driver + " ****************** \n");

            // driver.manage().timeouts().pageLoadTimeout(CommonConstants.PAGE_LOAD_WAIT_SEC,
            // TimeUnit.SECONDS);

            if (null != m_gridUrl) {
                // Log the remote node ip address where the test is running
                Log.info("Remote Node IP: " + CommonHelper.getIPOfRemoteNode(driver));
            }


        } catch (Exception e) {
            e.printStackTrace();
            Log.warn(e.getMessage());
        }

为节点提供超时和浏览器超时触发CMD:

java -Dwebdriver.chrome.driver=D:/imp/iTAF_Driver_Home/chromedriver.exe -jar selenium-server-standalone-3.3.1.jar -port 5554 -role node -hub http://10.18.15.168:5550/grid/register -timeout 86400 -browserTimeout 86000

此问题是反复出现的错误。

0 个答案:

没有答案