2017-10-20 28 views
0

Je le code suivant écrit en Selenium/Java mais je veux paramétrez ce code et ajouter le nom de la balise pour laquelle la capture d'écran est prise:Comment prendre capture d'écran dans le concombre en utilisant le nom de tag

@Then("^Take Screenshot$") 
public void tearDown() { 
    // take the screenshot at the end of every test 
    String location = "D:/ubdd/screenshots/"; 
    DateFormat dateFormat = new SimpleDateFormat("dd-mm-yyyy h-m-s"); 
    Date date = new Date(); 
    File scrFile = 
    ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); 
    // now save the screenshto to a file some place 
    try { 
    FileUtils.copyFile(scrFile, new File(location + 
    dateFormat.format(date)+".png")); 
    System.out.println("Screenshot saved"); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 
+0

Bienvenue dans StackOverflow! Veuillez consulter les [guides pour poser des questions] (https://stackoverflow.com/help/asking), en particulier [comment créer un exemple minimal, complet et vérifiable] (https://stackoverflow.com/help/mcve) – AesSedai101

Répondre

1

Utilisez le Before hook and add the Scenario object comme argument. Le concombre injectera ceci dans le scénario en cours d'exécution.

private Scenario sce; 

    @Before 
    public void beforeHook(Scenario scenario) { 
     this.sce = scenario 


     List<String> tags = sce.getSourceTagNames(); 
    } 

Vous pouvez accéder à l'objet de scénario stocké dans vos définitions étape pour appeler les getSourceTagNames() pour obtenir des étiquettes

0

Si vos tests sont mono-thread, vous pouvez utiliser le Avant crochet pour obtenir le scénario en cours d'exécution comme @Grasshoper mentionné et la stocker dans un scénario variable globale et accéder ensuite à partir de l'étape en cours d'exécution pour récupérer les noms de tag:

private Scenario scenario; 

@Before 
public void setUp(Scenario scenario) { 
    this.scenario = scenario; 
} 

@Then("^Take Screenshot$") 
public void tearDown() { 
    this.scenario.getSourceTagNames(); 
    ... 
} 

pour les exécutions multi-thread j'utiliser l'utilisation d'un ConcurrentHashMap pour maintenir un lien entre la ID de thread et le scénario en cours d'exécution. Vous pouvez ensuite récupérer le scénario en cours d'exécution à partir de l'étape en utilisant l'ID de thread.