[FIXED] Wie wird man redundanten Code in Java los?

Ausgabe

Guten Morgen, ich erstelle ein Projekt mit Tests in Selenium 4.5.0 und Java, aber ich habe eine Frage zur Änderung mit redundantem Code.

Ich habe vielleicht 15 Dateien mit Test in jeder Datei, in der ich die Methode mit demselben Element eingerichtet habe (Sie können in meinem Code sehen). Wie kann ich diese Methode – Setup und var wie WebDriver-Treiber in anderen Dateien festlegen und diese in allen meinen Dateien verwenden.

Mein Code:

public class MyPageTest {
    WebDriver driver;
    LoginPage loginPage;
    HomePage homePage;

@BeforeEach
public void setup(){
    System.setProperty("webdriver.chrome.driver","src/main/resources/chromedriver");
    driver = new ChromeDriver();
    loginPage = PageFactory.initElements(driver, LoginPage.class);
    homePage = PageFactory.initElements(driver, HomePage.class);
    driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(20));
    driver.manage().window().maximize();
    driver.get("mysite");
}

@Test
public void badPassword(){
    loginPage.setUsername("superuser");
    loginPage.setPassword("passwwitherror");
    loginPage.clickSave();
    homePage.checkTitle();
    loginPage.checkButton();
}

@AfterEach
public void tearDown(){
    this.driver.quit();
}

}

Ich möchte rein

@BeforeEach set zum Beispiel:

@BeforeEach
public void setup(){
       SetupClass.setup();
}

Danke für Ihre Hilfe

Lösung

Sie können Vererbung verwenden – extrahieren Sie die gemeinsamen Variablen und den Code in die übergeordnete Klasse. Zum Beispiel:

abstract class BaseSeleniumTest {

    WebDriver driver;
    LoginPage loginPage;
    HomePage homePage;

    public BaseSeleniumTest() {
        System.setProperty("webdriver.chrome.driver","src/main/resources/chromedriver"    );
        this.driver = new ChromeDriver();
        this.loginPage = PageFactory.initElements(driver, LoginPage.class);
        this.homePage = PageFactory.initElements(driver, HomePage.class);
    }

    public void setup() {
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(20));
        driver.manage().window().maximize();
        driver.get("mysite");
    }

}

public class MyPageTest extends BaseSeleniumTest {

    @BeforeEach
    public void setup(){
        super.setup();
    }
    
}

Wenn Selen zulässt, dass übergeordnete Klassen kommentierte Methoden enthalten, können Sie es vereinfachen, um die Methode in der übergeordneten Klasse zu kommentieren und Methoden in untergeordneten Klassen zu setupentfernen@BeforeEach


Beantwortet von –
Adrian Janakiewicz


Antwort geprüft von –
David Goodson (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like