Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按顺序进行Junit自动化测试_Java_Selenium_Junit - Fatal编程技术网

Java 按顺序进行Junit自动化测试

Java 按顺序进行Junit自动化测试,java,selenium,junit,Java,Selenium,Junit,我用Java在一个类中创建了Junit测试。基本上,一个类包含多个测试用例,当测试运行时,chrome页面会出现一个空白页面。对于每个@test senario,它都会出现故障或类似情况,它会重置为打开另一个chrome页面,而不是在同一页面中执行每个测试并进入下一个测试,依此类推。当我在(一个@testcase)中运行这一切时,它工作得很好。 我使用量角器并以与描述和其相同的方式编程,没有问题。我正试图用Junit在Java中做同样的事情,所以如果一个测试用例失败,我可以快速地转到那个测试用例

我用Java在一个类中创建了Junit测试。基本上,一个类包含多个测试用例,当测试运行时,chrome页面会出现一个空白页面。对于每个@test senario,它都会出现故障或类似情况,它会重置为打开另一个chrome页面,而不是在同一页面中执行每个测试并进入下一个测试,依此类推。当我在(一个@testcase)中运行这一切时,它工作得很好。

我使用量角器并以与描述相同的方式编程,没有问题。我正试图用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);
  }

JUnit不会按顺序运行测试,因为单元测试应该能够独立运行(因此可以按任何顺序运行)

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

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

如果您想以更精细的方式执行此操作,请务必阅读
页面对象模式
。或者最近的
剧本模式

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

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

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

如果您想以更精细的方式执行此操作,请务必阅读
页面对象模式
。或者最近的
剧本模式

用于单元测试,该单元测试本不应该是必需的,但您有一个集成测试工作流,在该工作流中,这对获取更多失败细节非常有用

您可以在测试类上使用
FixMethodOrder
注释,但需要以正确的方式命名方法。我建议您在当前姓名前加上前缀,如
step1\uu
step2\u

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

由于设置是按方法进行的,因此您必须切换到BeforeClass的“按类设置”行为(必须是静态的)。

对于不需要的单元测试,但您有一个集成测试工作流,在该工作流中,这对于获取更多失败细节非常有用

您可以在测试类上使用
FixMethodOrder
注释,但需要以正确的方式命名方法。我建议您在当前姓名前加上前缀,如
step1\uu
step2\u

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

由于按照方法进行设置,您必须切换到在每个@Test方法之前执行ist之前的
@BeforeClass
(必须是静态的)。

@ @上课前是你想要的

@BeforeClass
public static void setUpBeforeClass() throws Exception { 

}

要运行已排序的测试,可以使用@FixMethodOrder注释。

@Before在每个@Test方法之前执行ist @上课前是你想要的

@BeforeClass
public static void setUpBeforeClass() throws Exception { 

}


要运行已排序的测试,您可以使用@FixMethodOrder注释。

在eclipse中,当我使用@FixMethodOrder(methodsorter.NAME\u升序)时,我得到“无法将方法排序定义为变量”我现在遇到的问题是,如果页面出现了,但没有自动转到url,我必须在第一步输入吗?我通过在第1步之前添加另一个@test注释修复了这个问题,指示webdriver首先转到url。。。谢谢你们的帮助,伙计们:)。嗯,你们确定在以前的更改中没有掉任何东西吗?baseUrl在任何地方都没有使用…嘿,我又添加了5个@test注释,它们不再符合顺序。我如何修复它们?在eclipse中,当我使用@FixMethodOrder(MethodSorters.NAME\u升序)时,我得到“无法将方法排序定义为变量”我现在遇到的问题是,如果页面出现了,但没有自动转到url,我必须在第一步输入吗?我通过在第1步之前添加另一个@test注释修复了这个问题,指示webdriver首先转到url。。。谢谢你们的帮助,伙计们:)。嗯,你们确定在以前的更改中没有掉任何东西吗?baseUrl不在任何地方使用…嘿,我又添加了5个@test注释,它们不再符合顺序。我该如何修复?我现在的问题是,如果页面出现但没有自动转到url,我必须在第一步输入它吗?我通过在第1步之前添加另一个@test注释修复了这个问题,通过指示webdriver首先转到url。。。谢谢大家的帮助:)。我现在遇到的问题是,页面出现了,但没有自动转到url。我必须在第一步输入吗?我通过在第1步之前添加另一个@test注释修复了这个问题,指示webdriver先转到url。。。谢谢大家的帮助:)。我现在遇到的问题是,页面出现了,但没有自动转到url。我必须在第一步输入吗?我通过在第1步之前添加另一个@test注释修复了这个问题,指示webdriver首先转到url。。。谢谢大家的帮助:)。我现在遇到的问题是,页面出现了,但没有自动转到url。我必须在第一步输入吗?我通过在第1步之前添加另一个@test注释修复了这个问题,指示webdriver首先转到url。。。谢谢你们的帮助,伙计们:)。