Selenium как загрузить файл

Обновлено: 06.07.2024

В этой статье вы узнаете как пользоваться связкой PyCharm + Python + unittest + Selenium + JavaScript.

Для лучшего понимания пригодятся начальные знания Python и JavaScript

Основные методы работы в Selenium не зависят от языка, на котором вы пишете тест. Они разобраны в статье «Основы Selenium»

Я для работы использую PyCharm . Как добавить в PyCharm Selenium читайте здесь

Можете взять другой IDE или запускать из-под Linux ,но не советую пытаться запускать тесты Selenium из Подсистемы Windows для Linux так как в bash для Windows нет поддержки графики по умолчанию. Можно заморочиться и поставить что-то вроде Xming, но я не стал пробовать.

В этой статье я постараюсь показать развитие тестировщика на Python + Selenium.

Сначала попробуем запускать Selenium Webdriver и выполнять разные задачи, как средствами, встроенными в Webdriver, так и включая различные JavaScript манипуляции с DOM.

Установка

Первым делом нужно убедиться что установлен Python

Затем нужно убедиться что установлен pip

pip 20.0.2 from /usr/lib/python3/dist-packages/pip (python 3.8)

Если всё в порядке, то selenium можно установить через pip как обычный пакет

pip3 install selenium

Collecting selenium Downloading selenium-3.141.0-py2.py3-none-any.whl (904 kB) |████████████████████████████████| 904 kB 8.7 MB/s Requirement already satisfied: urllib3 in /usr/lib/python3/dist-packages (from selenium) (1.25.8) Installing collected packages: selenium Successfully installed selenium-3.141.0

Выбор драйвера

После установки Selenium нужно скачать драйверы для нужных браузеров.

Это действие не зависит от того на каком языке программирования вы планируете писать тест.

Подробную инструкцию можете прочитать в статье Selenium

Когда путь до драйвера добавлен в PATH можно подключать нужный браузер в ваш Python код.

Firefox драйвер называется Gecko Driver и подключается так

from selenium import webdriver driver = webdriver.Firefox()

Chrome аналогично. Вместо слова driver вы можете придумать свои называния. Например chdriver и ffdriver.

Поиск элеменотов

Есть много способов искать элементы, но их объединяет необходимость импортировать By

Простой тест

Зайдём на сайт и проверим, что в названии есть фраза «О Финляндии и путешествиях» найдём изображение по имени класса, найдём изображение по имени селектора

headless

Для «невидимого» запуска Selenium Webdriver нужно использовать опцию headless

Чтобы пользоваться этим режимом нужно импортировать Options

Можно добавить логику на основе переданного аргумента. Я обычно добавляю лог.

Как нажать на кнопку

Чтобы нажать на кнопку нужно найти элемент и использовать функцию click()

Например, найдём элемент button с классом new-button и нажмём на него.

Можно искать по id

Также допустимо сперва присвоить переменной результат поиска и потом вызвать click()

Поиск по тексту

Задача: кликнуть на кнопку с текстом LOGIN

Известно: div с текстом LOGIN имеет класс title, но элементов этого класса несколько и какой по счёту нам нужен неизвестно

Находим все элементы класса title

title_class = driver.find_elements_by_class_name("title") for el in title_class: if el.text == "LOGIN": login_button = el login_button.click()

Дождаться загрузки элемента

Допустим, вам нужно дождаться загрузки элементов с классом Buttons

Вы готовы ждать максимум десять секунд.

driver.implicitly_wait(10) buttons = driver.find_elements_by_class_name("Buttons")

Если элементы появятся быстрее, специально ждать десять секунд драйвер не будет.

Таким образом implicit wait это либо пока элемент не нашёлся, либо пока лимит времени не истёк. Лимит вы устанавливаете сами для каждого случая отдельно.

Автозаполнение формы

Пример автозаполнения формы на сайте. Может пригодиться, если вы сделали форму и хотите время от времени проверять всё ли на ней работает.

Сперва убедимся, что в названии страницы присутствует «Коста-дель-Соль» затем автоматически заполним форму.

Пример реального теста на создание пользователя

Запускаем Chrome и заходим на сайт.

Логинимся, находим нужный пункт в верхнем меню - Tools открываем его.

Выпадает список - находим там нужный - User Profiles.

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

В этом примере поиск элементов по классу сделан средствами JavaScript, затем найденным элементам присвоены определённые id и уже по этим id из находит Selenium Webdriver

Не копируйте этот тест себе пока не прочитаете всю статью. Очень много чего ещё можно оптимизировать

Импорт файлов

Если вам нужно загрузить файл с помощью Selenium - нажимать на кнопку загрузки не нужно.

Найдите элемент input (скорее всего) в котором триггерится загрузка. Выделите его и используйте .send_keys с указанием пути до файла

Допустим, что вы нашли этот элемент и его Или у него не было никакого id вообще, но вы присвоили ему этот id самостоятельно с помощью JavaScript

Пример теста без использования специальных библиотек

Основное отличие от предыдущего примера - кликов на верхнее меню теперь несколько, поэтому скрипт клика на элемент верхнего меню оформлен как функция, которая принимает в качесте параметра название элемента меню, например Tools, и затем использует это название как ключ для внутреннего словаря - получает порядковый номер элемента и кликает на него.

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

Selenium + unittest

Как вы уже скорее всего знаете, в Selenium Webdriver нет никаких средств для написания тестов. Обычно вместе с Webdriver используют библиотеку того языка программирования, на котором работает программист-тестировщик.

В этой статье я пользуюсь Python 3 поэтому в качестве библитеки для тестирования могу выбрать unittest, nose или pytest.

В этом уроке мы узнаем, как работать с загрузкой и загрузкой файлов.

Загрузка файлов

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


обработать всплывающее окно загрузки файла в селен вебдрайвер


Помните следующие две вещи при загрузке файлов в WebDriver


Загрузка файлов

Что такое Wget?

Настройка Wget

Шаг 1: Создайте новую папку на диске C и назовите ее «Wget».

Загрузите wget.exe отсюда и поместите его в папку Wget, созданную на шаге выше.




Шаг 3: Введите команду, чтобы проверить, работает ли данная настройка


Кажется, есть проблема записи на диск C.

В нашем примере, как показано в шаге 3, существует проблема записи на диск C. Давайте изменим местоположение загрузки на диск D и проверим результаты.


Messenger был успешно загружен.

Прежде чем продолжить, не забудьте удалить загруженный файл

Использование WebDriver и Wget


Шаг 1

Импортируйте пакет «java.io.IOException», потому что нам придется перехватывать IOException позже на шаге 4.


Шаг 2

Используйте getAttribute (), чтобы получить значение href для ссылки на скачивание и сохранить его как строковую переменную. В этом случае мы назвали переменную «sourceLocation».


Шаг 3

Настройте синтаксис для wget с помощью следующей команды.


Шаг 4

Начните процесс загрузки, вызвав wget из нашего кода WebDriver.


Подводя итог, ваш код WebDriver может выглядеть так, как показано ниже.

После выполнения этого кода проверьте диск D и убедитесь, что установщик Yahoo Messenger был успешно загружен с него.

Python + Selenium (5) - загрузка и скачивание веб-файлов

1. Загрузка изображений и файлов

1.1 Загрузка тега ввода


Возьмем пример загрузки аватара в личных настройках Мукенета:

Загруженный аватар на этой странице на самом делекарточка ввода тега с type = ‘file’В этом случае для загрузки аватара нужно только вызвать метод sendkey webdriver:

Поскольку CSS этого элемента .hide скрывает его, он должен сначала стать видимой карточкой метки, а затем передать информацию о файле, и аватар будет успешно загружен:

1.2 Загрузка не входных тегов


В этом случае вы можете использовать PyKeyBoard только для имитации событий клавиатуры для загрузки файлов.
В качестве примера возьмем импорт локальных закладок Google Chrome:

После нажатия кнопки «Выбрать файл» появится знакомое окно загрузки файла:



В настоящее время мы не можем выполнять связанные операции с элементами веб-страницы. В настоящее время вы можете использовать PyKeyBoard только для имитации событий клавиатуры для передачи и загрузки информации о файлах.
PyKeyBoard необходимо сначала установить подключаемый модуль в моемЭтот блогПодробные инструкции приведены в.
После установки PyKeyBoard вы можете начать его использовать. Мы начинаем с нажатия кнопки «Выбрать файл», чтобы открыть окно с файлом и написать его простой код операции:

2. Загрузка файла

Шаги по загрузке файлов с веб-страниц:

Затем мы должны решить автоматическое выполнение шагов 2-3.
В selenium у каждого браузера есть некоторые настройки по умолчанию, такие как: путь загрузки по умолчанию, всплывать или нет и т. д. Эти настройки по умолчанию могут эффективно решить нашу последнюю проблему.

Настройки, связанные с Chrome:

Настройки, связанные с Firefox:

Установите значение 0 для загрузки в путь загрузки браузера по умолчанию, установите значение 2 для сохранения в указанный каталог.

Используется для указания каталога загруженного файла. Функция os.getcwd () не требует передачи параметров и используется для возврата текущего каталога.

Укажите страницу для загрузкиContent-type Стоимость,“application/zip” Тип файла. В зависимости от загруженного файла тип здесь будет разным. Если вы не уверены, какой тип файла вы загружаете, используйте Fiddler, чтобы захватить пакет и просмотреть его.

Я должен выполнить следующую задачу, используя Selenium Webdriver, приведенную ниже.

может кто-нибудь поделиться, как мы можем реализовать это с помощью Java?

вы не сможете получить доступ к диалоговому окну сохранить. Это контролируется ОС. Единственное, что вы действительно сможете сделать, это установить местоположение загрузки по умолчанию для браузера и разрешить ему автоматически загружать файлы. Затем проверьте файл на Java.

вы должны проверить ответ С это предыдущий, так что вопрос. В основном при настройке вашего профиля Firefox вы добавляете вызов для установки свойства browser.helperApps.neverAsk.saveToDisk в список, разделенный запятыми. из типов MIME всегда загружать:

посмотреть это Mozilla KB FAQ статья on About: configs.

обновление Похоже, теперь это возможно см. этот ответ в другом вопросе

всплывающее окно диалога отмена / сохранение может появиться, потому что сайт отправляет вам другой тип MIME.

Проверьте фактическое содержимое заголовка.

используя firefox, встроенный в Инструменты разработчика, щелкните правой кнопкой мыши, чтобы проверить ссылку элемента / загрузки, а затем посмотрите на сетевой монитор, чтобы увидеть возвращаемое значение заголовка ContentType.. Это тот, который вы хотите использовать..

enter image description here

установите настройки профиля соответственно

Я ожидал "text / csv", однако получил " application/octet-stream" как только это было добавлено в список принятых типов, все работало так, как ожидалось,Домены

вам может потребоваться скопировать файлы cookie, которые Selenium имеет, чтобы имитировать пользователя Selenium (например, если вы тестирование веб-сайта, который требует входа в систему).

хотя этот метод будет отличаться для разных языков программирования,он работает одинаково для всех браузеров.

Я думаю, вы ищете что-то вроде этого

Если вы используете Java и Chromdriver, я разработал библиотека что должно сделать ваши загрузки намного проще.

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

Читайте также: