Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Тест на пайтоне, даунлоад файла/файлов и проверка их целосности

selenium
python
Теги: #<Tag:0x00007fedbaf9b208> #<Tag:0x00007fedbaf9b0c8>

(Ivan Pletin) #1

Здравствуйте.
Нужна помощь в написании теста на Пайтоне+Селениум. Сценарий приблизительно такой.

  1. открыл браузер, зашел на сайт
  2. Зашел в папку
  3. Отметил чекбоксами интересующие меня файы
  4. Нажал кнопку Даунлоад
    C этими шагами у меня нет проблем. А вот дальше, мне нужно проверить что файлы скачались, появились в папке у меня на компе и проверить их целосность. И я понятия не имею как это делать. Посоветуйте хотя бы в каком направлении копать.

Использую Линукс, Селениум, Пайтон


(Yury) #2

Работать с файловой системой можно через модуль os.path
В частности os.path.isfile(your_file) возвращает True, если файл есть.
Ну а целостность проверяется подсчетом контрольной суммы - hashlib.md5 в помощь.


(Ivan Pletin) #3

а этот модуль нужно использовать в том же тесте ,где я скачиваю файл? или это будет следующий тест?


(rmerkushin) #4

Сравнивайте хэши скачанных файлов с эталонными.
Получить md5 файла можно как-то так:

import hashlib

hashlib.md5(open('filename','rb').read()).hexdigest()

(Yury) #5

Логичнее в этом же тесте проверять, если в этом суть теста.


(Valentin Buryakov) #6

Вот может будет полезно, как я делаю в js такое, устанавливаем капабилити, чтобы скачивалось в нужную папку

capabilities: {
    'browserName': 'chrome',
    'chromeOptions': {
      prefs: {
        'download': {
          "directory_upgrade": true,
          'prompt_for_download': false,
          'default_directory': path.resolve(__dirname, './downloads/'),
        },
      },
    },

Потом в тесте нажимаем ссылку и ждем когда файл скачается, потом с этом файлом можно делать всё что угодно, проверить размер, контрольную сумму, даж с помощью сторонних тулзов сравнить и контент

 var fs = require('fs');
 var filename = path.resolve(__dirname, '../download/your-file');

  browser.wait(function() {
            return fs.existsSync(filename);
        }, timeout || 30000).then(function () {
            console.log('exported to: ' + filename);
        }, function () {
            expect(false).toBeTruthy('File was not exported');
        });

(Ivan Pletin) #8

более-менее разобрался. я уже проверяю наличее скачанного файла в папке, все получается.
а на счет целостности остались вопросы. ну вот я получил хеш скачанного файла, что мне с ним делать? если сравнивать то с чем?


(Yury) #9

Ну как с чем, с хэшем исходника.


(Goshko Nazar) #10

для простого сравнения, можно не скачивать файл, а запросить у сервера content-lenght по ссылке на файл, и сравнивать.