Перейти к содержимому

Фотография

Уникальное имя скриншота


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 4

#1 jerom55

jerom55

    Новый участник

  • Members
  • Pip
  • 17 сообщений
  • ФИО:Иванов Сергей Викторович

Отправлено 15 ноября 2022 - 15:45

Всем привет!

 

Друзья тренируюсь в написание авто тестов на selenium+java+testng, возникла необходимость делать скриншоты на ошибках. Реализовал стандартными средствами Selenium WebDriver

Внимание вопрос:

 

Как же сделать у каждого скриншота уникальное имя? Желательно дата и время а там как пойдёт. Часть кода где на данный момент делаю скриншот (пока реализовал в позитивной части теста)

package Topiframe.AppManager;

import org.apache.commons.io.FileUtils;
import org.openqa.selenium.*;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.Assert;
import org.testng.annotations.Test;

import java.io.File;
import java.text.DateFormat;
import java.time.Duration;

public class NavigationHelper {

private void commission() {
    if (isElementPresent(By.cssSelector(".SmartInput_textFail__37qzX"))){
      LOG.error("Введённая сумма не входит в допустимый диапазон");
      Assert.fail();
    }
    LOG.info("Получаем стоимость услуги с комиссией");
    WebDriverWait wait = new WebDriverWait(wd, Duration.ofSeconds(10));
    try {
      wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector(".Service_inputsRow__1zBtT:nth-child(1) > .Form_value__cMLhf")));
      WebElement comm = wd.findElement(By.cssSelector(".Service_inputsRow__1zBtT:nth-child(1) > .Form_value__cMLhf"));
      String commission = comm.getAttribute("innerText");
      LOG.info("TL_COMMISSION = " + commission);
      WebElement tlAmount = wd.findElement(By.cssSelector(".Service_inputsRow__1zBtT:nth-child(2) > .Form_value__cMLhf"));
      String amount = tlAmount.getAttribute("innerText");
      LOG.info("TL_AMOUNT = " + amount);
      //Делаем скрин
      takeSnapShot(wd, "F:\\GitHub\\MyTests\\TopiframePayTest\\Screenshots\\date.png") ;
    }catch (Exception e) {
      LOG.error("Блок комиссий не доступен");
      Assert.fail();
    }
  }
  public static void takeSnapShot(WebDriver webdriver,String fileWithPath) throws Exception{
    //Convert web driver object to TakeScreenshot
    TakesScreenshot scrShot =((TakesScreenshot)webdriver);
    //Call getScreenshotAs method to create image file
    File SrcFile=scrShot.getScreenshotAs(OutputType.FILE);
    //Move image file to new destination
    File DestFile=new File(fileWithPath);
    //Copy file at destination
    FileUtils.copyFile(SrcFile, DestFile);
  }
}

  • 0

#2 user12

user12

    Специалист

  • Members
  • PipPipPipPipPip
  • 894 сообщений
  • ФИО:Виктор
  • Город:Минск


Отправлено 16 ноября 2022 - 06:50

Вообще надо использовать Selenide и не писать такой сложный код

public static DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd-MM HH:mm:ss");

public static String getRandomFileName() {
return dateTimeFormatter.format(LocalDateTime.now()).replaceAll("[-: ]", "");
}

Вывод на консоль:

1611094848

те. 16 ноября в 9 часов 48 минут 48 секунд


  • 0

#3 Snap

Snap

    Специалист

  • Members
  • PipPipPipPipPip
  • 980 сообщений
  • ФИО:Роман
  • Город:Москва


Отправлено 16 ноября 2022 - 07:09

Либо генерируете случайно имя с помощью функции random или т.п.


  • 0

#4 jerom55

jerom55

    Новый участник

  • Members
  • Pip
  • 17 сообщений
  • ФИО:Иванов Сергей Викторович

Отправлено 16 ноября 2022 - 08:13

Вообще надо использовать Selenide и не писать такой сложный код

public static DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd-MM HH:mm:ss");

public static String getRandomFileName() {
return dateTimeFormatter.format(LocalDateTime.now()).replaceAll("[-: ]", "");
}

Вывод на консоль:

1611094848

те. 16 ноября в 9 часов 48 минут 48 секунд

Супер спасибо) помогло. Про Selenid раньше только слышал, сейчас посмотрел, код действительно выглядит куда понятнее и проще, возьму на изучение.


  • 0

#5 jerom55

jerom55

    Новый участник

  • Members
  • Pip
  • 17 сообщений
  • ФИО:Иванов Сергей Викторович

Отправлено 16 ноября 2022 - 08:16

По итогу вышло так

 takeSnapShot(wd, "F:\\GitHub\\MyTests\\TopiframePayTest\\Screenshots\\"+getRandomFileName()+".png") ;
 
public static DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd-MM_HH:mm:ss");

  public static String getRandomFileName() {
    return dateTimeFormatter.format(LocalDateTime.now()).replaceAll("[-: ]", "");
  }

Решил ничем символы не заменять разделил просто дату и время

Итоговый файл получается

1611_110800.png


  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных