Beim Testen mit Selen ist es üblich (glaube ich), den Browser für jede Testmethode zu starten / zu stoppen. Ich wollte es jedoch verkürzen, da sich die Ausführungszeit erheblich erhöhen würde, wenn der Browser jedes Mal neu gestartet würde.
Ich denke, es gibt verschiedene Methoden, aber dieses Mal habe ich es mit der ClassRule-Annotation von JUnit4 versucht. Wenn Sie es in ClassRule deklarieren, kann für jede Testklasse new / quit von WebDriver festgelegt werden, sodass es entsprechend gekürzt wird.
↓ In Bezug auf Regel / Klassenregel ist diese leichter zu verstehen. http://qiita.com/Chayata/items/dd31e22bca6df6c91793
Um die Regelanmerkung zu verwenden, müssen Sie eine dedizierte Klasse implementieren und als Testmethodenfeld verwenden. Weitere Informationen finden Sie in diesem Repository (https://github.com/knakamatsu/SeleniumJUnitRuleSample).
Implementieren Sie die Klasse, indem Sie ExternalResouce erben, und generieren Sie WebDriver als Feld der Klasse. Da die überschriebene after-Methode zur Nachbearbeitung der Junction wird, implementieren Sie das Beenden von WebDriver in after.
WebDriverRule.java
public class WebDriverRule extends ExternalResource {
private WebDriver driver;
public WebDriver getDriver() {
return getInstance();
}
@Override
protected void after() {
this.driver.quit();
}
private WebDriver getInstance(){
if(this.driver == null){
this.driver = new ChromeDriver();
}
return this.driver;
}
}
Die implementierte Regelklasse kann sowohl in @Rule als auch in @ClassRule verwendet werden und lautet wie folgt. Bei Deklaration mit @ClassRule entspricht Vorher / Nachher der Vor- und Nachbearbeitung für jede Klasse (@BeforeClass und @AfterClass). Bei Deklaration mit @Rule entspricht Vorher / Nachher der Vor- und Nachbearbeitung für jede Methode (@setUp und @tearDown).
Test.java
public class classSample {
@ClassRule
public static WebDriverRule dr = new WebDriverRule();
@Test
public void test(){
WebDriver d = dr.getDriver();
d.get("https://www.google.co.jp/");
WebElement el = d.findElement(By.cssSelector("input[aria-label='Suche']"));
el.sendKeys("chrome test.");
}
}
Implementierung mit @ClassRule auf der Oberseite und @Rule auf der Unterseite. Beide Tests sind gleich. In der mit der Probe erstellten Testklasse ergibt sich ein Unterschied von ca. 10 Sekunden. Im Fall von ClassRule wird der Browser nur für die erste Testmethode gestartet. Je mehr Testmethoden vorhanden sind, desto effektiver ist er. In der Testumgebung dauerte das Starten des Browsers ca. 5 Sekunden.
Dies hängt vom Testziel ab. Der Neustart des Browsers für jede Testmethode ist jedoch häufig zu lang. Daher ist dies vorzuziehen. Selbst wenn zwischen den Testmethoden eine Abhängigkeit besteht, ist dies schwer zu bemerken (z. B. Informationen, die im Cookie verbleiben und sich versehentlich bewegen). Seien Sie also vorsichtig.