Как сделать снимок экрана с webelement (неполный экран, а не вся страница), который не работает в селене
Как сделать снимок экрана с webelement (неполный экран, а не вся страница), который не работает в селене. Я пытался использовать Point, чтобы определить местоположение webelement и создать снимок экрана, который работал, но это было жестко запрограммировано. Я хочу решение во время выполнения. например, у меня на веб-странице есть 3 поля, 2 текстовых поля и 1 кнопка, и тест не пройден (любой сбой, например, элемент не найден или элемент отключен) из-за второго текстового поля. Я хочу сделать снимок второго текстового поля только во время выполнения. пожалуйста помоги
1 ответ
Вы можете использовать стороннюю библиотеку под названием aShot. Может использоваться для:
- Делает снимок экрана WebElement на разных платформах (например, браузеры рабочего стола, iOS Simulator Mobile Safari, браузер эмулятора Android)
- Захват полной страницы скриншоты.
- Украшает скриншоты
- Обеспечивает гибкое сравнение скриншотов
Добавьте эту зависимость к вашему pom.xml
:
<!-- https://mvnrepository.com/artifact/ru.yandex.qatools.ashot/ashot -->
<dependency>
<groupId>ru.yandex.qatools.ashot</groupId>
<artifactId>ashot</artifactId>
<version>1.5.3</version>
</dependency>
Теперь вы можете сделать скриншот просто:
public void takeScreenShotWhenFailed(WebDriver driver, WebElement webElement ){
Screenshot screenshot = new AShot().coordsProvider(new WebDriverCoordsProvider()).takeScreenshot(driver, webElement);
ImageIO.write(screenshot.getImage(),"PNG",new File(System.getProperty("user.dir") +"\\Images\\googleLogo.png"));
}
ОБНОВЛЕНИЕ: чтобы определить, какой элемент не прошел программу, вы можете просто окружить каждый шаг try-catch
блок и в catch
Вы можете позвонить screenshot
метод, например, так:
WebElement element;
try{
element = driver.findElement(By.id("id"));
element.click();
}catch(Exception e){
takeScreenShotWhenFailed(driver,element);
}