Как сделать снимок экрана с 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);
}
Другие вопросы по тегам