2017-03-16 118 views
0

我在Java中的一个类中创建了Junit测试。基本上这个类中有多个测试用例,当测试运行时,chrome页面会出现一个空白页面。它运行不正常,它为每个它重置的@ test senario提供另一个chrome页面,而不是在同一页面内执行每个测试,然后进行下一个测试。当我运行这个全部在(一个@test例子)时,它工作正常。按顺序的Junit自动化测试

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

请帮助我不是经验丰富的Java.My代码如下。

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); 
    } 

回答

1

对于不应该被要求的单元测试,但是您有一个集成测试工作流程,这对于获取更多细节失败有帮助。

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

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

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

+0

在日食当我使用@FixMethodOrder(MethodSorters.NAME_ASCENDING)我得到“方法排序不能定义为一个变量” – Jonathan

+0

好吧,我发现了这个问题并解决它 – Jonathan

+0

问题我现在有的是,它的网页出来,但没有自动去网址我将不得不在第一步输入? – Jonathan

3

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

这是一个简单的修复,但有些事你能做的就是从所有的方法删除所有的@Test注释并添加以下测试:如果你想这样做更精致的方式

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

,做阅读关于Page Object pattern。或者最近的Screenplay pattern

+0

问题我现在有的是页面出现,但没有自动去网址,我将不得不在第一步输入? – Jonathan

+0

我通过在step1之前添加了另一个@test注解来解决这个问题,方法是先将webdriver先转到url ...感谢所有帮助人员:)。 – Jonathan

0

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

@BeforeClass 
public static void setUpBeforeClass() throws Exception { 

} 

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

+0

问题我现在有它是页面出现,但没有自动去url,我将不得不在第一步输入? – Jonathan

+0

我通过在step1之前添加另一个@test注解来解决这个问题,方法是先将webdriver首先转到url ...感谢所有帮助人员:)。 – Jonathan