0

Can someone please help with the below, I have a maven project set up on eclipse and each time I run the test, it runs fine on chrome but I get the below error on junit console:

org.openqa.selenium.NoSuchSessionException: Session ID is null. Using WebDriver after calling quit()?
Build info: version: '4.0.0-alpha-3', revision: '8c567de6dc'
System info: host: '04081W10', ip: '10.50.47.210', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_201'
Driver info: driver.version: RemoteWebDriver
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:128)
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:576)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:327)
    at org.openqa.selenium.remote.RemoteWebDriver.findElementById(RemoteWebDriver.java:375)
    at org.openqa.selenium.By$ById.findElement(By.java:196)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:319)
    at Scenarios.NormanNrasProject.InternalNameReserve1YearTest.InternalNameReserve90DaysTest(InternalNameReserve1YearTest.java:59)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:541)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:763)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:463)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)

And here is my code:

    System.setProperty("webdriver.chrome.driver", "C:\\Users\\nrapoo\\Desktop\\chromedriver.exe");
    WebDriver driver = new ChromeDriver();
    WebDriverWait wait=new WebDriverWait(driver, 20);
    driver.get("http://cedd-wb/enter.htm");
    driver.manage().window().maximize();
    driver.findElement(By.xpath("//*[@id=\"username\"]")).sendKeys("seden");
    driver.findElement(By.xpath("//*[@id=\"pword\"]")).sendKeys("hello1");
    driver.findElement(By.xpath("//*[@id=\"login_form\"]/div[3]/button")).click();      
    driver.findElement(By.xpath("//*[@id=\'menuDropdown-enq\']")).click();
    Thread.sleep(300L);
    driver.findElement(By.xpath("//ul[@class='list-unstyled di-block m-y-10']//a[contains(text(),'People')]")).click();
    driver.switchTo().frame("browsePeopleFrame");
    Thread.sleep(500L);
    driver.findElement(By.xpath("//*[@id='quickselect']")).sendKeys("ATNS");        
    Thread.sleep(500L);
    driver.findElement(By.xpath("//*[@id=\"peopleSelectFormBean\"]/div[2]/div[1]/div/div/div/span[2]/button/span")).click();
    driver.switchTo().defaultContent();
    WebElement namingwait;
    namingwait = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//ul[@id='categories-tabs']//a[contains(text(),'Naming')]")));
    namingwait.click();
    driver.switchTo().defaultContent();
    WebElement reservedname;
    reservedname = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"category-114\"]/div[1]/a[1]")));
    reservedname.click();
    Thread.sleep(900L);
    driver.findElement(By.xpath("//*[@id=\"content\"]/section[3]/div/article/header/ul/li/a")).click();
    char[] chars = "abcdefghijklmnopqrstuvwxyz".toCharArray();
    StringBuilder sb = new StringBuilder();
    Random random = new Random();
    for (int i = 0; i < 8; i++) {
        char c = chars[random.nextInt(chars.length)];
        sb.append(c);   
    String name = sb.substring(0, 1).toUpperCase() + sb.substring(1);   
    driver.findElement(By.id("newName")).sendKeys("Cote" + name + name + name + "jay");
    driver.findElement(By.xpath("//*[@id=\"proposedNameForm\"]/div/div/div[1]/span/button")).click();
    driver.findElement(By.xpath("//textarea[@id='meaning']")).sendKeys("MEANING");
    driver.findElement(By.xpath("//*[@id=\"reservationType2\"]")).click();

    Thread.sleep(900L);
    driver.findElement(By.xpath("//*[@id=\"nav-footer\"]/div/ul/li[1]/button")).click();
    driver.findElement(By.xpath("//button[@name='_target10']")).click();
    driver.findElement(By.xpath("//button[@name='_finish']")).click();
    driver.findElement(By.xpath("//a[contains(text(),'Return to Enquire Name Reservations')]")).click();
    Thread.sleep(900L);
    driver.quit();
undetected Selenium
  • 183,867
  • 41
  • 278
  • 352

1 Answers1

0

The only issue I see in this code block is, you have switched to a frame only once:

driver.switchTo().frame("browsePeopleFrame");

Where as you have switched to defaultContent() twice as in:

driver.switchTo().defaultContent();
WebElement namingwait;
namingwait = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//ul[@id='categories-tabs']//a[contains(text(),'Naming')]")));
namingwait.click();
driver.switchTo().defaultContent();

You need to adjust your frame switching.

However, Selenium Java client v4.0.0-alpha-3 is a alpha release and shouldn't be used for Production Testing.

Additionally, ensure that:

  • ChromeDriver is updated to current ChromeDriver v79.0.3945.36 level.
  • Chrome is updated to current Chrome Version 79.0 level. (as per ChromeDriver v79.0 release notes)
  • Clean your Project Workspace through your IDE and Rebuild your project with required dependencies only.
  • If your base Web Client version is too old, then uninstall it through Revo Uninstaller and install a recent GA and released version of Web Client.
undetected Selenium
  • 183,867
  • 41
  • 278
  • 352
  • Hi, thanks for your answer. So how do I fix the issue you mentioned about switching to frame once and defaultContent twice? – holla-holla Dec 03 '19 at 15:39
  • @holla-holla Yes, as you switched to frame only once, switching to default frame must be only once. – undetected Selenium Dec 03 '19 at 16:35
  • Hi, thanks for your reply again but how do I switch to default frame once when I need it to work for two codes? If possible, please help me amend the code. Thanks – holla-holla Dec 04 '19 at 08:16
  • @holla-holla Didn't get your point _...work for two codes..._, it is as simple as _...as you switched to frame only once, switching to default frame must be only once..._ – undetected Selenium Dec 04 '19 at 08:18
  • Hi DebanjanB, can you please help me rewrite the code as you explained as per the frame and default frame. Thanks – holla-holla Dec 04 '19 at 08:39
  • Hi, can you please help me rewrite the code as you explained as per the frame and default frame. Thanks – holla-holla Dec 04 '19 at 11:45
  • @holla-holla With out the relevant HTML it will be difficult to analyze and suggest exactly at which point you need to invoke `driver.switchTo().defaultContent();` But on a separate note, in the rarest of the rare cases you may need to invoke `driver.switchTo().defaultContent();` even when you have invoked `driver.switchTo().frame();` only once. I would suggest go for the trials removing one line of `driver.switchTo().frame("browsePeopleFrame");` at a time and look out if it works for either this or that. – undetected Selenium Dec 04 '19 at 15:21