Как сделать снимок экрана с webelement (неполный экран, а не вся страница), который не работает в селене - PullRequest
2 голосов
/ 11 июня 2019

Как сделать снимок экрана с webelement (неполный экран, а не вся страница), который не работает в селене. Я пытался использовать Point для определения местоположения webelement и создания снимка экрана, который работал, но это было жестко запрограммировано. Я хочу решение во время выполнения,например, у меня на веб-странице есть 3 поля, 2 текстовое поле и 1 кнопка, и тест не пройден (любой сбой, например, элемент не найден или элемент отключен) из-за второго текстового поля. Я хочу сделать снимок второго текстового поля только во время выполнения.пожалуйста помогите

1 Ответ

1 голос
/ 11 июня 2019

Вы можете использовать стороннюю библиотеку под названием 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);
}
...