当前位置: 首页 > 知识库问答 >
问题:

在不同的浏览器会话中运行测试,但总是得到'NoSuchSessionExcture:会话ID为空。调用退出()后使用WebDriver?'

慕祯
2023-03-14

我的测试项目在BaseTest中有@BeforeClass和@AfterClass。类别:

public class BaseTest {

  @BeforeClass(groups = {"first"})
  public void beforeTest() {
    getDriver().get("URL");
  }

  @AfterClass(alwaysRun = true)
  public void afterTest() {
    getDriver().close();
    removeDriver();
  }
}

和它的第一次测试。类:

public class SmokeTest extends BaseTest {

  private PageOne pageOne = PageFactory.initElements(getDriver(), PageOne.class);
  @Test(testName = "test1", groups = { "first" })
  public void firstTest() {
    pageOne.goSomething();
  }

  @Test(testName = "test2", groups = { "first" })
  public void secondTest() {
    pageOne.goSomethingElse();
  }
}

WebDriver单例:

public class WebDriverSingleton {

  private static WebDriver driver;

  public static WebDriver getDriver() {
    if (driver == null) {
      driver = new ChromeDriver();
    }
    return driver;
  }

  public static void removeDriver() {
    driver.quit();
    driver = null;
  }
}

而且效果很好。直到我添加了新的案例,我想在新的浏览器实例中开始。

我补充的是:

public class BaseModuleTest {
  @BeforeClass(groups = {"second"})
  public void beforeClass() {
    getDriver().get("another URL");
  }
}
public class ModuleTest extends BaseModuleTest {

  private PageTwo pageTwo = PageFactory.initElements(getDriver(), PageTwo.class);
  private PageOne pageOne = PageFactory.initElements(getDriver(), PageOne.class);

  @Test(testName = "test1", groups = {"second"})
    public void testUp() {
      pageTwo.goToPageOne();
      pageOne.doSomething(); // getting fail here
  }
}

当我使用testgnconfiguration启动测试时。xml

>

  • 第一组通过
  • 浏览器窗口关闭
  • WebDriver的新实例打开新的浏览器窗口
  • 转到URL
  • 当开始与第一组运行期间实例化的页面上的第一个WebElement交互时,返回错误: <区块报价> <区块报价> <区块报价>

    org.openqa.selenium.NoSuchSession异常:会话ID为空。调用退出()后使用WebDriver?

    就我使用的页面对象模型而言,我在“第二”组中使用的页面与在“第一”组中初始化的页面相同,我猜他们不知何故“记住”了第一个会话Id,该Id变为“null”。尽管我在ModuleTest中重新初始化了它们。test1()。。。

    无论如何,如果我的建议是正确的,那么如何将新sessionId传递给实例化的页面对象呢?或者什么是重新初始化它们的正确方法?

  • 共有1个答案

    季城
    2023-03-14

    看起来您的问题是:

    @BeforeClass(groups = {"first"})
    

    @AfterClass(alwaysRun = true)
    

    您总是在完成一个类后销毁驱动程序对象,但您只是为特定组中的类创建驱动程序对象。我建议将您的@BeforeClass调整为:

    @BeforeClass(alwaysRun = true)
    

    或者

    @BeforeClass(groups = {"first, "second"})
    
     类似资料:
    • org.openqa.selenium.NoSuchSessionException:会话ID为空。在调用退出()后使用WebDriver?构建信息:版本:“3.141.59”,修订版:“e82be7d358”,时间:“2018-11-14T08:17:03”系统信息:主机:“DESKTOP-NLBMRCD”,IP:“192.168.1.15”,os.name:“Windows 10”,os.ar

    • 问题内容: 我的问题如下:如何在不同Java类中的测试中重复使用浏览器会话?我打开了这样的浏览器: 然后,我必须使用一些凭据登录网站,并在登录后想执行其他测试,所以我不想为每个测试都登录,因为我需要进行很多测试并为每个用户登录花十年时间。例如,流程如下所示:登录->推送一些组件->添加一些值->生成报告。在此之后,我想在另一个组件上生成其他报告,但是当我尝试使用它时,将给出一个空指针异常。有任何想

    • 问题内容: 我们有一个基于JSF 2.0(MyFaces)构建并在Weblogic应用服务器上运行的应用程序。我们面临有关http Session的问题。 问题: 假设我已经在两个不同的IE窗口中打开了该应用程序,并在第一个窗口中提供了一些搜索输入。在第二个窗口的会话中共享在第一个窗口中接收到的搜索结果数据。 注: 。Bean的作用域为,范围为。共享变量没有问题。 知道为什么会这样吗,以及防止这种

    • 问题内容: 我正在尝试使用Cucumber / Java编写一些硒自动UI测试。如果我的功能文件中只有一个测试,则一切正常。但是,如果我添加第二个测试,则会在上出现此错误: 基本上,我将在一个包中的InitializeWebdriver类上初始化webdriver变量,然后在其他(步骤定义)类中对其进行引用。我确实将下面的步骤定义作为InitializeWebdriver类的一部分列出,并且工作正

    • 我正在运行一个通过ssh会话运行的程序。这意味着我使用putty连接到一个linux,程序开始,使用/etc/bash.bashrc文件。在某个时候,程序应该结束,通过putty的ssh会话应该断开连接。我现在用下面的代码做了一些事情,但它不起作用:程序退出,并留在linux shell中,这意味着putty已经连接好了。我所期望的是命令“exit”来结束putty ssh会话。 谢谢你的帮助。