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

如何设置Selenium 2。Eclipse(JUnit4)中同一Webdriver中的x测试套件

索嘉胜
2023-03-14

我已经筛选了一段时间堆栈上的答案,并且遇到了一些工作的例子,这些工作似乎完成了这一点,或者至少很接近。

  • 在整个selenium套件中使用相同的web驱动程序

我所希望能够做的就是将selenium测试用例导出为JUnit4文件,将它们带入eclipse并根据需要进行修改,然后能够从测试套件中添加或删除它。当测试套件运行时,它应该打开一个Web驱动程序窗口并运行每个测试用例,就像它在基本Firefox窗口上的selenium IDE中运行一样。唯一的问题似乎是web驱动程序类。我尝试过在测试用例类之间引用它,这似乎可以保持窗口打开而不会抛出错误,但第二个测试用例永远不会运行,就像它陷入循环一样,或者停在@之前

import static org.junit.Assert.fail;

import java.util.concurrent.TimeUnit;

import org.junit.After;
import org.junit.Before;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

@RunWith(Suite.class)
@SuiteClasses({TestCase1.class,TestCase2.class})
public class RunTestSuite {

}

^^^测试套件示例^^^

import java.util.regex.Pattern;
import java.util.concurrent.TimeUnit;
import org.junit.*;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;

public class TestCase1 {
  private WebDriver driver;
  private String baseUrl;
  private boolean acceptNextAlert = true;
  private StringBuffer verificationErrors = new StringBuffer();

  @Before
  public void setUp() throws Exception {
    driver = new FirefoxDriver();
    baseUrl = "http://www.google.com/";
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
  }

  @Test
  public void testOpen() throws Exception {
    driver.get(baseUrl + "");
  }

  private boolean isElementPresent(By by) {
    try {
      driver.findElement(by);
      return true;
    } catch (NoSuchElementException e) {
      return false;
    }
  }

  private boolean isAlertPresent() {
    try {
      driver.switchTo().alert();
      return true;
    } catch (NoAlertPresentException e) {
      return false;
    }
  }

  private String closeAlertAndGetItsText() {
    try {
      Alert alert = driver.switchTo().alert();
      String alertText = alert.getText();
      if (acceptNextAlert) {
        alert.accept();
      } else {
        alert.dismiss();
      }
      return alertText;
    } finally {
      acceptNextAlert = true;
    }
  }
}

^^^测试用例1^^^

import java.util.regex.Pattern;
import java.util.concurrent.TimeUnit;
import org.junit.*;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;

public class TestCase2 {
  private WebDriver driver;
  private String baseUrl;
  private boolean acceptNextAlert = true;
  private StringBuffer verificationErrors = new StringBuffer();

  @Before
  public void setUp() throws Exception {
    if (TestCase1.driver != null) {
      driver = TestCase1.driver;
  } else {
      driver = new FirefoxDriver();
  }
    baseUrl = "http://www.google.com/";
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
  }

  @Test
  public void testOpen() throws Exception {
    driver.get(baseUrl + "");
  }

@After
  public void tearDown() throws Exception {
    //driver.quit();
    String verificationErrorString = verificationErrors.toString();
    if (!"".equals(verificationErrorString)) {
      fail(verificationErrorString);
    }
  }

  private boolean isElementPresent(By by) {
    try {
      driver.findElement(by);
      return true;
    } catch (NoSuchElementException e) {
      return false;
    }
  }

  private boolean isAlertPresent() {
    try {
      driver.switchTo().alert();
      return true;
    } catch (NoAlertPresentException e) {
      return false;
    }
  }

  private String closeAlertAndGetItsText() {
    try {
      Alert alert = driver.switchTo().alert();
      String alertText = alert.getText();
      if (acceptNextAlert) {
        alert.accept();
      } else {
        alert.dismiss();
      }
      return alertText;
    } finally {
      acceptNextAlert = true;
    }
  }
}

^^^测试用例2^^^

感谢您的帮助!

共有1个答案

牧宁
2023-03-14

您必须将驱动程序实例的访问修饰符从private更改为static public,以便第二个类可以访问它。还要确保两个类位于同一个包中。

这是它在TestCase1类中应该是什么样子

public static WebDriver driver;

我试过了,效果很好。

 类似资料:
  • 主要内容:1 概述,2 创建简单的Maven项目,3 项目包装结构,4 更新pom.xml文件中的JUnit依赖关系,5 创建LoginService.java和LoginServiceTest.java,,6.创建UserService.java和UserServiceTest.java,7 创建测试套件,8 结论1 概述 在本指南中,我们将学习如何一次运行多个测试类。将Suite用作运行程序可以使您手动构建一个包含许多类测试的套件。它等效于JUnit 3.8.x静态Test suite()方

  • 问题内容: 我正在运行运行移动鼠标并单击()的测试。为了改善调试和查看体验,我想查看鼠标光标当前所在的位置。使用上述方法不会移动系统鼠标光标。 问题答案: 在每个页面加载后执行javascript,以启用鼠标光标显示。 这取决于目标页面中加载的JQuery beeing-也可以使用没有精美动画的另一种解决方案。

  • 在Maven项目中,我有一些现有的测试依赖于JUnit4。由于多种原因,我无法在JUnit5中迁移这些测试。 本质上,一些测试依赖于使用JUnit4运行程序的库,代码迁移可能需要时间。 我同样希望用JUnit5创建新的测试类,它现在发布并提供了新的有趣的特性。 如何做到这一点?

  • 我有两个TestSuite类(和) 他们看起来是这样的: 如何并行运行它们?我运行一个这样的测试$mvn class test-Dtest=TestSuiteOne 但我如何同时运行它们呢?

  • 问题内容: 如果该类是由Test-Suite发起的,是否有办法知道JUnit 4测试类?我有要在所有测试之前运行的全局性内容(关于内存中的数据库),因此我想在测试服中进行。但是,我仍然希望能够在没有Test- Suit的情况下一次启动一个测试,因此我需要知道是否需要在测试的@Before部分中初始化全局对象……有人知道吗?如果它是可能的 ? 问题答案: 有几种方法可以实现此目的。最简单,最简单的方

  • 我有几十个Selenium Webdriver测试。我想一次完成所有的任务。如何运行测试,使每个测试都不会打开新的Webdriver浏览器窗口?