Как проверить, успешно ли загружен zip-файл или нет, используя веб-драйвер java-selenium?

Я загружаю несколько zip-файлов из приложения, и каждый файл имеет разный размер. Очевидно, что время загрузки зависит от размера файла. У меня есть приведенный ниже код Java для проверки загрузки на основе размера файла. Но он не работает должным образом. Он просто ждет 10 секунд и завершает цикл, переходя к следующему набору строк. Может ли кто-нибудь помочь мне решить эту проблему?

public void isFileDownloaded(String downloadPath, String folderName) {

        String source = "downloadPath" + folderName + ".zip";

        long fileSize1;
        long fileSize2;
        do {
            System.out.println("Entered do-while loop to check if file is downloaded successfully");

            String tempFile = source + "crdownload";
            fileSize1 = tempFile.length(); // check file size
            System.out.println("file size before wait time: " + fileSize1 + " Bytes");
            Thread.sleep(10); // wait for 10 seconds
            fileSize2 = tempFile.length(); // check file size again
            System.out.println("file size after wait time: " + fileSize2 + " Bytes");

        } while (fileSize2 != fileSize1);

        }

Размер файла до и после времени ожидания всегда возвращает 43 байта.

Вы знаете имена файлов заранее или они динамические?

cruisepandey 28.05.2019 08:22

@curisepandey: я заранее знаю имена файлов. Параметризация это как «Имя папки» в исходной переменной.

Rahul 28.05.2019 08:25

Очищайте папку загрузки после каждого запуска. Затем проверьте, существует ли загружаемый файл. Или можно попробовать с переименованием.

Hasitha Jayawardana 28.05.2019 08:46

@HasithaMJayawardana: я удаляю загруженный файл с помощью кода после выполнения над ним необходимых операций. Но цикл «делать-пока» все еще не работает.

Rahul 28.05.2019 08:56

возьмите все имена файлов в массиве String, затем переберите его и внутри цикла проверьте наличие каждого файла.

cruisepandey 28.05.2019 09:00

Верен ли `String source = "downloadPath" + folderName + ".zip";`? Я подозреваю, что вместо этого вы хотите использовать аргумент downloadPath.

Dakshinamurthy Karra 28.05.2019 09:31
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
6
912
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Возьмите два списка строк:

List<String> expectedFileName ;

в этот список добавьте все имена файлов, которые должны быть в формате строки. [Ваши ожидаемые имена файлов]

затем, после загрузки всех файлов, перейдите в каталог загрузки:

Проверьте, сколько файлов присутствует, используя такой код:

new File(<directory path>).list().length

Теперь сравните длину ожидаемого и фактического:

expectedFileName.size() и new File(<directory path>).list().length, если есть какое-либо несоответствие, верните ложный и напечатайте Файлы отсутствуют. Если нет никакого несоответствия, получите все имена файлов из каталога следующим образом:

List<String> actualFileName;
File folder = new File("your/path");
File[] listOfFiles = folder.listFiles();

for (int i = 0; i < listOfFiles.length; i++) {
  if (listOfFiles[i].isFile()) {
   actualFileName.add(listOfFiles[i].getName());
}
} 

Теперь у вас есть два списка String , вы можете легко их сравнить. Хотя он не будет проверять размер файла.

Ответ принят как подходящий

Вот как я управляю загрузкой файлов:

public class Rahul {

    String downloadDir = "C:\\Users\\pburgr\\Downloads\\";

    public WebDriverWait waitSec(WebDriver driver, int sec) {
        return new WebDriverWait(driver, sec);
    }

    public File waitToDownloadFile(WebDriver driver, int sec, String fileName) {
        String filePath = downloadDir + fileName;
        waitSec(driver, 30).until(new Function<WebDriver, Boolean>() {
          public Boolean apply(WebDriver driver) {
            if (Files.exists(Paths.get(filePath))) {
              System.out.println("Downloading " + filePath + " finished.");
              return true;
            } else {
              try {
                Thread.sleep(1000);
              } catch (InterruptedException e) {
                 System.out.println("Downloading " + filePath + " not finished yet.");
              }
            }
            return false;
          }
        });
        File downloadedFile = new File(filePath);
        return downloadedFile;
      }
}

Я нашел ошибку, сделанную мной. System.out.println("Загрузка " + filePath + " еще не завершена."); должен быть в улове. Я отредактировал свой ответ.

pburgr 28.05.2019 10:54

Другие вопросы по теме