按顺序进行Junit自动化测试

时间:2017-03-16 16:16:23

标签: java selenium junit

我在Java中用一个类创建了Junit测试。基本上一个类在该类中有多个测试测试用例,当测试运行时,chrome页面会出现一个空白页面。对于每个@test senario,它都会乱序运行,它会重置另一个chrome页面,而不是在同一页面内执行每个测试,然后进行下一个测试。当我在(一个@test案例)中运行时,它运行正常。

我使用量角器并以相同的方式编程描述并且没有问题。我正在尝试使用Junit在Java中执行相同操作,因此如果测试用例失败,我可以快速转到那个测试用例。我有@Before和@Test以及@after注释

请帮助我不熟悉Java。我的代码如下。

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

  @Before
  public void setUp() throws Exception {
    System.setProperty("webdriver.chrome.driver", "C:\\eclipse\\Java\\chromedriver\\chromedriver.exe");  
    System.setProperty("webdriver.gecko.driver", "C:\\eclipse\\Java\\geckodriver\\geckodriver.exe");  
    driver = new ChromeDriver();
    baseUrl = "http://www.bankrate.com/";
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
  }

  @Test 
  public void moveToElementMortgages() throws InterruptedException{
      Actions builder = new Actions(driver);
      WebElement element = driver.findElement(By.linkText("MORTGAGES"));
      builder.moveToElement(element).perform();
      Thread.sleep(2000);
  }

  @Test 
  public void clickOnCalculators() throws InterruptedException{
      Actions builder = new Actions(driver);
      WebElement calculator = driver.findElement(By.cssSelector("a[href*='mortgage-calculators']"));
      builder.moveToElement(calculator).perform();
      calculator.click();
      Thread.sleep(2000);
  }

  @Test 
  public void nextPageScrollDown() throws InterruptedException{ 
      ((JavascriptExecutor)driver).executeScript("scroll(0, 400)");
      Thread.sleep(2000);
  }

  @Test 
  public void clickMorgageLoanPaymentCalc() throws InterruptedException{  

      WebElement MorgageCalc = driver.findElement(By.linkText("Mortgage loan payment calculator"));  
      MorgageCalc.click();
      Thread.sleep(2000);
  }

  @Test 
  public void scrollDownCalcPage() throws InterruptedException{  

      ((JavascriptExecutor)driver).executeScript("scroll(0, 400)");
        Thread.sleep(2000);
  }

  @Test 
  public void clearMortgageSendKeys() throws InterruptedException{  

      WebElement MortgageField = driver.findElement(By.id("KJE-LOAN_AMOUNT"));
      MortgageField.clear();
      Thread.sleep(1000);

      WebElement LoanAmount = driver.findElement(By.name("LOAN_AMOUNT"));
      LoanAmount.sendKeys("$240,000");
      Thread.sleep(3000);
  }

3 个答案:

答案 0 :(得分:3)

JUnit没有按顺序运行测试,因为单元测试应该能够独立运行(并且因此以任何顺序运行)。

这是一个简单的修复,但您可以做的是从所有方法中删除所有@Test注释并添加以下测试:

@Test 
public void fullTest() {
  moveToElementMortgages();
  clickOnCalculators();
  nextPageScrollDown(); 
  clickMorgageLoanPaymentCalc();
  scrollDownCalcPage();
  clearMortgageSendKeys();
}

如果您想以更精确的方式执行此操作,请阅读Page Object pattern。或者是最近的Screenplay pattern

答案 1 :(得分:1)

对于永远不需要的单元测试,但是你有一个集成测试工作流程,这对于获得更多细节失败有所帮助。

您可以在测试类上使用FixMethodOrder注释,但您需要以正确的方式命名方法。我建议您使用当前名称的前缀,例如step1_step2_等。

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class BankrateAlt {
  @Test 
  public void step1_moveToElementMortgages() {…}
  @Test
  public void step2_clickOnCalculators() {…}
  …
}

由于每个方法完成设置,您必须切换到@BeforeClass的每个类行为(必须是静态的)。

答案 2 :(得分:0)

@Before ist在每个@Test方法之前执行 @BeforeClass就是你想要的。

@BeforeClass
public static void setUpBeforeClass() throws Exception { 

}

要运行订购的测试,您可以使用@FixMethodOrder注释。