2017-03-16 117 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