Lors des tests avec Selenium, il est courant (je pense) de démarrer / arrêter le navigateur pour chaque méthode de test. Cependant, je voulais le raccourcir car le temps d'exécution augmenterait considérablement si le navigateur était redémarré à chaque fois.
Je pense qu'il existe différentes méthodes, mais cette fois je l'ai essayé avec l'annotation ClassRule de JUnit4. Si vous le déclarez dans ClassRule, new / quit de WebDriver peut être défini pour chaque classe de test, il sera donc raccourci en conséquence.
↓ Concernant la règle / la règle de classe, celle-ci est plus facile à comprendre. http://qiita.com/Chayata/items/dd31e22bca6df6c91793
Pour utiliser l'annotation Rule, vous devez implémenter une classe dédiée et l'utiliser comme champ de méthode de test. Pour plus de détails, reportez-vous à ce référentiel (https://github.com/knakamatsu/SeleniumJUnitRuleSample)
Implémentez la classe en héritant ExternalResouce et générez WebDriver en tant que champ de la classe. Étant donné que la méthode after remplacée devient le post-traitement de la jonction, implémentez la sortie de WebDriver dans 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;
}
}
La classe Rule implémentée peut être utilisée à la fois dans @Rule et @ClassRule, et elles sont les suivantes. Lorsqu'il est déclaré avec @ClassRule, avant / après correspond au pré-traitement et au post-traitement pour chaque classe (@BeforeClass et @AfterClass) Lorsqu'il est déclaré avec @Rule, avant / après correspond au pré-traitement et au post-traitement pour chaque méthode (@setUp et @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='Chercher']"));
el.sendKeys("chrome test.");
}
}
Implémentation avec @ClassRule sur la face supérieure et @Rule sur la face inférieure. Les deux tests sont identiques. Dans la classe de test réalisée avec l'échantillon, il y a une différence d'environ 10 secondes. Dans le cas de ClassRule, le navigateur est lancé uniquement pour la première méthode de test, donc plus il y a de méthodes de test, plus il est efficace. Dans l'environnement de test, il a fallu environ 5 secondes pour démarrer le navigateur.
Cela dépend de la cible du test, mais le redémarrage du navigateur pour chaque méthode de test est souvent excessif, il est donc préférable de le faire. Cependant, il est difficile de le remarquer même si une dépendance est créée entre les méthodes de test (comme des informations restant dans le cookie et se déplaçant accidentellement), alors soyez prudent.