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 setup
entfernen@BeforeEach
Beantwortet von – Adrian Janakiewicz
Antwort geprüft von – David Goodson (FixError Volunteer)