【问题标题】:Multiple WebDriver instances in Selenium without Grid?Selenium 中没有网格的多个 WebDriver 实例?
【发布时间】:2014-06-06 12:18:23
【问题描述】:

是否可以在本地使用多个 selenium webdrivers 而不使用 selenium 网格同时运行多个测试?

我正在通过调用 new FireFoxDriver() 创建多个实例,但窗口中的会话似乎相互干扰。

驱动程序由如下所示的 JUnit-Methods 创建和销毁。对于每个测试类,都有一个 WebDriver,但每个测试用例都有不同的执行持续时间。在第一个 Test-class 完成并调用该类的 tearDownClass() 之后。 这个异常抛出:

org.openqa.selenium.remote.SessionNotFoundException: 调用 quit() 后无法使用 FirefoxDriver。 构建信息:版本:'2.39.0',修订:'14fa800511cc5d66d426e08b0b2ab926c7ed7398',时间:'2013-12-16 13:18:38' 系统信息:主机:'T61',ip:'127.0.1.1',os.name:'Linux',os.arch:'i386',os.version:'3.11.0-15-generic',java.version :'1.7.0_51'

@BeforeClass
public static void setUpClass() {
    driver = new FireFoxDriver();
}

@AfterClass
public static void tearDownClass() {
    driver.quit(); // this should only kill the current driver
}

【问题讨论】:

  • 使用 FirefoxDriver() 调用的多个 firefox 实例不会相互干扰,除非我们在处理 webdriver 实例时搞砸了。你能告诉我们,调用是如何发生的吗?
  • @Harsha 我添加了一个如何创建和销毁驱动程序的示例
  • 我更喜欢遵循这种方式 在 JUnit 类中,需要使所有内容都非静态,因此,我们将摆脱与其他实例的干扰 使用线程围绕您的 JUnit 类创建一个包装器,以便您可以根据要执行的测试用例或测试方法的参数调用所需的方法
  • @Harsha 我对并发测试执行的更改建立在此框架中的其他测试类之上,并且驱动程序是静态引用。 :(
  • 您可以使用由所有子类继承的超类,这样就可以在没有静态的情况下共享 webdriver 实例,并且基于超类创建线程,使其覆盖在有无静电,无跨线程干扰

标签: java selenium junit selenium-webdriver selenium-grid


【解决方案1】:

然后尝试为不同的实例使用不同的驱动变量:

例如:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

public class Testing 
{
    WebDriver driver1, driver2;
    @BeforeClass
    public void BeforeClass()
    {
        driver1 = new FirefoxDriver();
        driver2 = new FirefoxDriver();
    }
    @Test
    public void Test1() throws InterruptedException
    {
        driver1.get("http://www.google.com");
        driver2.get("http://gmail.com");

    }
    @org.testng.annotations.AfterClass
    public void AfterClass()
    {
        driver1.quit();
    }
}    

【讨论】:

    【解决方案2】:

    尝试使用不同的 Eclipse.. 我的意思是,开始 2 次日食并在两次日食中运行相同的程序....

    【讨论】:

    • 这不会有用,因为我们不是在谈论两个并行测试,而是 10+。通过并行 IDE 解决这个问题只会导致过多的开销。
    • 如果需要,大规模执行它们会导致内存方面的许多问题,不必要的 cpu 利用率.....而不是那样,我们可以在多个单元中从命令行执行它以节省内存被日食占据
    【解决方案3】:

    您可以在没有完整的 Selenium Grid 的情况下使用 RemoteWebDriver。如果您在本地启动 Selenium Standalone jar 而不定义角色,那么它实际上是 Grid 和 Node 合二为一。使用这个本地 Selenium Server 实例,您可以同时运行多个浏览器。

    通过 RemoteWebDriver 创建一个 Firefox 实例非常简单,并且在线记录良好

    【讨论】:

      【解决方案4】:

      默认 selenium 将在 4444 端口上运行。请创建您的实例,以便通过添加每个实例使用不同的端口

           -port <port id/number>
      

      【讨论】:

      • 这是关于多个 WebDriver 实例
      猜你喜欢
      • 2018-03-21
      • 1970-01-01
      • 2013-02-06
      • 1970-01-01
      • 2022-10-07
      • 2014-06-11
      • 2011-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多