Je pense que la plupart des réponses ici sont sur-engagées. La façon dont je l'ai fait est à travers 2 méthodes d'aide, la première pour attendre un élément basé sur n'importe quel sélecteur ; et la seconde pour prendre une capture d'écran de celui-ci.
Note : Nous avons lancé le WebElement
à un TakesScreenshot
de sorte que nous ne capturons que cet élément dans l'image spécifiquement. Si vous voulez la page/fenêtre complète, vous devez lancer driver
à la place.
Edit : J'ai oublié de dire que j'utilise Java et Selenium v3 (mais cela devrait être la même chose pour v4).
WebDriver driver = new FirefoxDriver(); // define this somewhere (or chrome etc)
public <T> T screenshotOf(By by, long timeout, OutputType<T> type) {
return ((TakesScreenshot) waitForElement(by, timeout))
.getScreenshotAs(type);
}
public WebElement waitForElement(By by, long timeout) {
return new WebDriverWait(driver, timeout)
.until(driver -> driver.findElement(by));
}
Et ensuite, faites une capture d'écran de ce que vous voulez comme ceci :
long timeout = 5; // in seconds
/* Screenshot (to file) based on first occurence of tag */
File sc = screenshotOf(By.tagName("body"), timeout, OutputType.FILE);
/* Screenshot (in memory) based on CSS selector (e.g. first image in body
who's "src" attribute starts with "https") */
byte[] sc = screenshotOf(By.cssSelector("body > img[href^='https']"), timeout, OutputType.BYTES);