java - 我们可以使用静态变量来初始化 selenium webdriver 中的 webdriver

标签 java selenium webdriver

我们有一个静态变量来初始化 Selenium WebDriver 中的驱动程序。

公共(public)静态 WebDriver 驱动程序;

该变量在类(DriverInit)中声明,并在各种测试计划(测试类)的“@BeforeClass”中初始化。初始化的变量(驱动程序)将在整个项目中的各种可重用函数和@test方法中使用。驱动程序将在 @QAfterClass

处关闭/退出

这对于非并行执行脚本来说效果很好。使用静态变量来初始化驱动程序是否会影响并行执行?

例如:

public class DriverInit { (using remote webdriver, browser name will be read from XML)
  public static WebDriver driver;    
  public DriverInit() {
    switch (browser) {
    case "IE" : driver = ....
    case "Firefox" : driver = ....
    }
  }
}

public class TestClass {
  @BeforeClass
  public void BeforeClass() {
   DriverInit driver = new DriverInit();
  }

  @Test
  public void Test1() {
   DriverInit.driver.findElementBy();
   Reusable.func1();
  }
}

Public class Reusable {

  public WebElement r1;
  public Reusable() {
    r1 = DriverInit.driver.findElementBy(..);
  }
  public void func1() {
     r1.findElementBy(..);
  }
}

最佳答案

正如您所说,您可以使用静态驱动程序,但是,是的,如果直接在测试代码级别进行任何并行化,您将面临共享内存问题的风险。

出于这个原因,我避免使用静态驱动程序,这对于可能发展为并行化的测试套件来说是糟糕的设计。在 Selenium 网格中的多个服务器上运行单个进程启动测试是行不通的。

我围绕这种情况设计的方法是在初始化每个页面对象时将驱动程序(在@Before中创建)传递给它们。

如果套件不会增长,您仍然可以使用静态驱动程序,并将多个测试作为单独的作业启动(即单独的 Jenkins 作业,或从命令行单独运行等)

关于java - 我们可以使用静态变量来初始化 selenium webdriver 中的 webdriver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23735885/

相关文章:

javascript - 如何在 webdriverjs 中等待 takeScreenshot 截取屏幕截图

JavascriptException : Message: javascript error: arguments[0]. click is not a function error using arguments[0].click 通过 Selenium 和 Python

java - Spring数据JPA中的排序表达式

java - 线程 "main"java.lang.NoClassDefFoundError : wrong name 中的异常

java - Netty 与 RestEasy 的简单使用

java - 如何用某物替换一条线?

python - Selenium:从 Python 中的 <script type> 标签获取变量数据

java - HtmlUnit 中切换窗口

firefox - 使用配置文件共享相同配置文件副本的 FirefoxDriver 测试的并行执行

java - 将 Surefire 测试结果链接到 Jenkins 中的 WebDriver 屏幕截图