2017-03-16 6 views
0

Ich erstellte Junit-Test in einer Klasse in Java. Im Grunde eine Klasse mit mehreren Test-Testfällen innerhalb dieser Klasse und wenn der Test ausgeführt wird, erscheint die Chrom-Seite mit einer leeren Seite. Es läuft außerhalb der Reihenfolge und es ist wie für jeden @test senario setzt es eine andere Chromenseite anstelle der Ausführung jedes Tests innerhalb der gleichen Seite und gehen Sie zum nächsten Test so weiter. Wenn ich das alles in (ein @test Fall) ausführen, funktioniert es gut.Junit-Automatisierungstest in der Reihenfolge

Ich benutze Winkelmesser und programmieren die gleiche Art und Weise mit beschreibt und seine und haben kein Problem. Ich versuche dasselbe in Java mit Junit zu machen. Wenn ein Testfall fehlschlägt, kann ich schnell zu diesem Testfall gehen. Ich habe ein @Before und @ Test und @ nach Anmerkungen

Bitte helfen Sie mir bin nicht so erfahren mit Java.My Code ist unten.

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

Antwort

1

Für einen Komponententest, der nie erforderlich sein sollte, aber Sie haben einen Integrationstestworkflow, bei dem dies irgendwie nützlich ist, um mehr Detailfehler zu erhalten.

Sie können die FixMethodOrder Annotation für die Testklasse verwenden, aber Sie müssen Ihre Methoden ordnungsgemäß benennen. Ich würde ein Präfix zu Ihrem aktuellen Namen vermuten lassen, wie step1_, step2_ usw.

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

Wie das Setup pro Methode durchgeführt wird Sie in die eine pro Klasse Verhalten von @BeforeClass wechseln müssen (muss statisch sein).

+0

In Eclipse, wenn ich @FixMethodOrder (MethodSorters.NAME_ASCENDING) verwende, bekomme ich "Methode Sortierungen kann nicht definiert werden, um eine Variable" – Jonathan

+0

Okay, ich fand das Problem mit und gelöst – Jonathan

+0

Problem Ich habe jetzt ist, dass es die Seite kommen, aber tut nicht automatisch zur url gehen muss ich das im ersten schritt eingeben? – Jonathan

3

JUnit läuft nicht Tests, um als Einheit Tests sollten isoliert laufen können (und als Folge davon in beliebiger Reihenfolge).

Dies ist eine triviale Lösung, aber etwas, was Sie tun können, ist es, alle @Test Anmerkungen aus allen Methoden entfernen und fügen Sie den folgenden Test:

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

Wenn Sie dies in einer verfeinerten Art und Weise tun wollen, tun lesen Sie über Page Object pattern. Oder die neuere Screenplay pattern.

+0

Problem Ich habe jetzt ist, dass es die Seite kommen, aber nicht auf die URL automatisch gehen werde ich das im ersten Schritt eingeben? – Jonathan

+0

Ich habe das behoben, indem ich eine weitere @ test Annotation vor Step1 hinzugefügt habe, indem ich den Webdriver angewiesen habe, zuerst zur URL zu gehen ... Danke für all eure Hilfe Jungs :). – Jonathan

0

@Before ist vor jeder @Test-Methode ausgeführt @BeforeClass ist was Sie wollen.

@BeforeClass 
public static void setUpBeforeClass() throws Exception { 

} 

Zum Ausführen der bestellten Tests können Sie die Annotation @FixMethodOrder verwenden.

+0

Problem Ich habe jetzt ist, dass es die Seite hochkommt, aber nicht zur URL automatisch geht, muss ich das auf dem 1. Schritt eingeben? – Jonathan

+0

Ich habe das behoben, indem ich eine weitere @ test Annotation vor Step1 hinzugefügt habe, indem ich den Webdriver angewiesen habe, zuerst zur URL zu gehen ... Danke für all eure Hilfe Jungs :). – Jonathan

Verwandte Themen