Selenium wedriver: при параллельном выполнении выдается «org.openqa.selenium.NoSuchSessionException: неверный идентификатор сессии» - PullRequest
0 голосов
/ 28 сентября 2018

Я пытаюсь выполнить тестовые сценарии параллельно.Когда я пытаюсь превысить более 2 тестовых случаев в браузерах (chrome или firefox или оба) на удаленной машине (только для моего локального хоста), выдается следующее исключение.

* Основная база *: открытый класс TestBase {

public ThreadLocal<RemoteWebDriver> tlDriver = new ThreadLocal<RemoteWebDriver>();
public static ExcelTestData dataTable = new ExcelTestData();
public static Properties config = new Properties();
public static FileInputStream fis;
public static RemoteWebDriver driver;
public static BasicFunctions basics = new BasicFunctions(); 
public static ExtentReports extentReport = ExtentReportManager.getInstance();
public static ExtentTest extentTest;

}

* Функция libraray * открытый класс BasicFunctions extends TestBase {

public void register () {

    wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(ObjectRepositories.xpath_registerLink)));
    driver.findElement(By.xpath(ObjectRepositories.xpath_registerLink)).click();
    if(driver.findElement(By.xpath(ObjectRepositories.xpath_registrationTitle)).isDisplayed())
    {           
        driver.findElement(By.xpath(ObjectRepositories.xpath_loginTextbox)).sendKeys(dataTable.getData("RegressionData", "Register_login"));
        driver.findElement(By.xpath(ObjectRepositories.xpath_emailTextbox)).sendKeys(dataTable.getData("RegressionData", "Register_email"));
        driver.findElement(By.xpath(ObjectRepositories.xpath_reg_passwordTextbox)).sendKeys(dataTable.getData("RegressionData", "Register_password"));
        wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(ObjectRepositories.xpath_reg_conf_passwordTextbox)));
        driver.findElement(By.xpath(ObjectRepositories.xpath_reg_conf_passwordTextbox)).sendKeys(dataTable.getData("RegressionData", "Register_confirmPassword"));
        sleep(2000);
        try
        {
        wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(ObjectRepositories.xpath_reg_submisson)));
        driver.findElement(By.xpath(ObjectRepositories.xpath_reg_submisson)).click();
        }
        catch(NoSuchElementException nsee)
        {
            driver.findElement(By.xpath(ObjectRepositories.xpath_reg_passwordTextbox)).click();
        }
    }
}

публичный синхронизированный void driverInititation (Браузер строк) {

    System.out.println("Thread name is "+ Thread.currentThread().getName() + " and Thread ID is "+ Thread.currentThread().getId());
    if (ExcelReader.gridExecution.equals("Yes"))
    {
        if (Browser.equalsIgnoreCase("Firefox"))
        {
            System.setProperty("webdriver.gecko.driver", System.getProperty("user.dir")+"/src/test/resources/Executables/geckodriver.exe");
            DesiredCapabilities cap = DesiredCapabilities.firefox();
            try
            {
                tlDriver.set(new RemoteWebDriver(new URL(config.getProperty("Grid_Url")+":"+config.getProperty("Port_Firefox")+"/wd/hub"),cap));
                driver = tlDriver.get();
            }
            catch(MalformedURLException urlex)
            {
                urlex.printStackTrace();
            }
            catch(Exception e)
            {
                System.out.println("Other exception");
                e.printStackTrace();
            }
        }
        else if (Browser.equalsIgnoreCase("Chrome"))
        {
            System.setProperty("webdriver.chrome.driver", System.getProperty("user.dir")+"/src/test/resources/Executables/chromedriver.exe");
            DesiredCapabilities cap = DesiredCapabilities.chrome();
            try
            {
                tlDriver.set(new RemoteWebDriver(new URL(config.getProperty("Grid_Url")+":"+config.getProperty("Port_Chrome")+"/wd/hub"),cap));
                driver = tlDriver.get();
            }
            catch(MalformedURLException urlex)
            {
                urlex.printStackTrace();
            }
            catch(Exception e)
            {
                System.out.println("Other exception");
                e.printStackTrace();
            }
        }
    }
    else
    {
        if(Browser.equalsIgnoreCase("Firefox"))
        {
            System.setProperty("webdriver.gecko.driver", System.getProperty("user.dir")+"/src/test/resources/Executables/geckodriver.exe");
            driver= new FirefoxDriver();
        }
        else if(Browser.equalsIgnoreCase("Chrome"))
        {
            System.setProperty("webdriver.chrome.driver", System.getProperty("user.dir")+"/src/test/resources/Executables/chromedriver.exe");
            driver= new ChromeDriver();
        }
    }
    if(driver!=null)
    {
        driver.get(config.getProperty("ApplicationUrl"));
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
        wait = new WebDriverWait(driver,30);
        javascript = (JavascriptExecutor)driver;
    }
}

}

* Мой тестовый набор * открытый класс LoginValidation extends TestBase {

//public WebDriver driver;
@Parameters({"Browser"})
@BeforeTest
public void setupInitiation(String Browser)
{
    Thread.currentThread().setName(this.getClass().getSimpleName());
    basics.driverInititation(Browser);
}

@Test
public void execution()
{
    basics.login();
    basics.logout();
}

}

Исключение:

org.openqa.selenium.NoSuchSessionException: недопустимый идентификатор сеанса (информация о драйвере: chromedriver = 2.42.591088 (7b2b2dca23cca0862f674758c5a395) 685)NT 10.0.17134 x86_64) (ПРЕДУПРЕЖДЕНИЕ: сервер не предоставил никакой информации о трассировке стека) Длительность команды или время ожидания: 0 миллисекунд Информация о сборке: версия: '3.14.0', версия: 'aacccce0', время: '2018-08-02T20: 19: 58.91Z 'System информация: хост: 'PRABU', ip: '192.168.92.2', os.name: 'Windows 8.1', os.arch: 'amd64', os.version: '6.3', java.version: '1.8.0_40'Информация о драйвере: org.openqa.selenium.remote.RemoteWebDriver Capabilities {acceptInsecureCerts: false, acceptSslCerts: false, applicationCacheEnabled: false, browserConnectionEnabled: false, browserName: chrome, chrome: {chromedriverVersion: 2.42.520d2: 2.42.52d2: 2.42.50d2: 2.42.52d2 (0): 0D2D2: 0 ...: C: \ Users \ PRABUN ~ 1 \ AppData \ L ...}, cssSelectorsEnabled: true, databaseEnabled: false, goog: chromeOptions: {debuggerAddress: localhost: 50326}, handlesAlerts: true, hasTouchScreen: false, javascriptEnabled: true,locationContextEnabled: true, mobileEmulationEnabled: false, nativeEvents: true, networkConnectionEnabled: false, pageLoadStrategy: нормальный, платформа: XP, имя_платформы: XP, способный к повороту: false, setWindowRect: true, takeHeapSnapshot: true, takeScreenshot: true ,ourha:версия: 69.0.3497.100, webStorageEnabled: true, webdriver.remote.sessionid: f24126658364be46f247f15b580 ...} *** Информация об элементе: {Using = xpath, value = // div / a [@href = '# / register']} в sun.reflect.NativeConstructorAccessorImpl.newInstance0 (собственный метод) в sun.reflect.selenium.remote.java: 40) at org.openqa.selenium.remote.http.AbstractHttpResponseCodec.decode (AbstractHttpResponseCodec.java:80) в org.openqa.selenium.remote.http.AbstractHttpResponseCodec.RjponseC44. org)..selenium.remote.HttpCommandExecutor.execute (HttpCommandExecutor.java:158) по адресу org.openqa.selenium.remote.RemoteWebDriver.execute (RemoteWebDriver.java:548) по адресу org.openqa.selenium.remote.RemoteWebDriver.findElement (RemoteWebDriver.java:opena или org.opena org.aq).remote.RemoteWebDriver.findElementByXPath (RemoteWebDriver.java:424) в org.openqa.selenium.By $ ByXPath.findElement (By.java:353) в org.openqa.selenium.remote.RemoteWebDriverjWebDriverjind) в com.servicenow.functionallibraries.BasicFunctions.register (BasicFunctions.java:98) в com.servicenow.testcases.RegistrationFormEntry.execution (RegistrationFormEntry.java:30) в sun.reflect.NativeMethodAccessorImpl.invoke0 (родной).reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) по адресу java.lang.reflect.Method.invoke (Method.java:497) по адресу org.testng.internal.MethodInvocationHelper.inv4org.testng.internal.Invoker.invokeMethod (Invoker.java:580) в org.testng.internal.Invoker.invokeTestMethod (Invoker.java:716) в org.testng.internal.Invoker.invokeTestMethods (Invoker.java:988)в org.testng.internal.TestMethodWorker.invokeTestMethods (TestMethodWorker.java:125) в org.testng.internal.TestMethodWorker.run (TestMethodWorker.java:109) в org.testng.TestRunj.org.testng.TestRunner.run (TestRunner.java:505) в org.testng.SuiteRunner.runTest (SuiteRunner.java:455) в org.testng.SuiteRunner.access $ 000 (SuiteRunner.java:40) в org.testng.SuiteRunner $ SuiteWorker.run (SuiteRunner.java:489) в org.testng.internal.thread.ThreadUtil $ 1.call (ThreadUtil.java:52) в java.util.concurrent.FutureTask.run (FutureTask.java:266) вjava.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142) в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:617) в java.lang.Thread.run (45).

...