В двух предыдущих статьях брат Хун объяснил и представил загрузку файлов с помощью элементов управления вводом и загрузку файлов с помощью элементов управления без ввода, от теории к практике, но позже кто-то поднял вопросы. Предыдущие объяснения и введения были посвящены загрузке файла. Как это реализуется в Playwright, если загружено несколько файлов? Брат Хонг ознакомился с официальным API, там также есть API для загрузки нескольких файлов, поэтому сегодня я объясню и представлю этот пункт знаний.
Загрузите несколько файлов, чтобы представить официальныйAPIАдрес документа:Locator | Playwright Python
Входные файлы для загрузки можно выбрать с помощью метода locator.set_input_files().
Он ожидает, что первый аргумент будет указывать на входной элемент «файл» типа . В массиве можно передавать несколько файлов.
Если некоторые пути к файлам являются относительными, они будут разрешены относительно текущего рабочего каталога. Пустой массив очищает выбранные файлы.
# Select one file Выберите файл
page.get_by_label("Upload file").set_input_files('myfile.pdf')
# Select multiple files Выбрать несколько файлов
page.get_by_label("Upload files").set_input_files(['file1.txt', 'file2.txt'])
# Remove all the selected files Удалить все файлы
page.get_by_label("Upload file").set_input_files([])
# Upload buffer from memory Загрузить из кеша
page.get_by_label("Upload file").set_input_files(
files=[
{"name": "test.txt", "mimeType": "text/plain", "buffer": b"this is a test"}
],
)
Брат Хонг нашел пример онлайн-ввода с загрузкой нескольких файлов, а затем реализовал его с помощью кода.
# coding=utf-8🔥
# 1. Сначала установите кодировку UTF-8, которая поддерживает китайский и английский языки, как указано выше, обычно они располагаются в первой строке.
# 2. Примечания: включая время создания записи, автора и название проекта.
'''
Created on 2024-04-21
@author: Пекин-Хонге
Публичный аккаунт: Beijing Hongge (поиск WeChat: Beijing Hongge, фокус на Брат Хун, разблокируй больше тестовых предметов заранее! )
Project: Знакомство с серией «Последний выпуск» — Python+автоматизация драматургатест-56- Загрузить файлы - Дополнительная глава
'''
# 3. Импортировать модули
from playwright.sync_api import Playwright, sync_playwright, expect
def run(playwright: Playwright) -> None:
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
page = context.new_page()
page.goto("https://www.jq22.com/demo/jstpsc202005191001")
# Найдите кнопку выбора файла
page.locator('#upload-input').set_input_files(['C:/Users/Administrator/Desktop/bjhg.jpg','C:/Users/Administrator/Desktop/hg.png'])
#file_input_element.input_file('C:/Users/DELL/Desktop/bjhg.png')
page.wait_for_timeout(10000)
print("browser will be close")
page.close()
context.close()
browser.close()
with sync_playwright() as playwright:
run(playwright)
1. Запустите код, щелкните правой кнопкой мыши «Выполнить тест», и вы увидите вывод консоли, как показано ниже:
2. Проверьте действия браузера на компьютере после запуска кода (вы можете увидеть две картинки, загруженные Братом Хонгом). Как показано ниже:
# coding=utf-8🔥
# 1. Сначала установите кодировку UTF-8, которая поддерживает китайский и английский языки, как указано выше, обычно они располагаются в первой строке.
# 2. Примечания: включая время создания записи, автора и название проекта.
'''
Created on 2024-04-21
@author: Пекин-Хонге
Публичный аккаунт: Beijing Hongge (поиск WeChat: Beijing Hongge, фокус на Брат Хун, разблокируй больше тестовых предметов заранее! )
Project: Знакомство с серией «Последний выпуск» — Python+автоматизация драматургатест-56- Загрузить файлы - Дополнительная глава
'''
# 3. Импортировать модули
from playwright.sync_api import Playwright, sync_playwright, expect
def run(playwright: Playwright) -> None:
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
page = context.new_page()
page.goto("https://www.jq22.com/demo/easyUpload201801161800")
with page.expect_file_chooser() as fc_info:
page.locator('//*[@id="easy1"]/div[2]/div[1]').click() # Нажмите кнопку «Выбрать файл».
# page.pause()
file_chooser = fc_info.value
file_chooser.set_files(['C:/Users/Administrator/Desktop/bjhg.jpg','C:/Users/Administrator/Desktop/hg.png']) # Загрузить файлы
page.wait_for_timeout(10000)
print("browser will be close")
page.close()
context.close()
browser.close()
with sync_playwright() as playwright:
run(playwright)
1. Запустите код, щелкните правой кнопкой мыши «Выполнить тест», и вы увидите вывод консоли, как показано ниже:
2. Проверьте действия браузера на компьютере после запуска кода (вы можете увидеть две картинки, загруженные Братом Хонгом). Как показано ниже:
1. При загрузке нескольких файлов,Сообщить об ошибкеplaywright._impl._api_types.Error: Error: Non-multiple file input can only accept single file ,Как показано ниже:
Причина ошибки: Сообщение об ошибке указывает на то, что вы пытаетесь создать файл, не поддерживающий Загрузку. нескольких Произошла ошибка при предоставлении нескольких файлов в элемент ввода для файлов. в целом,HTMLиз<input>
элемент, еслиtype
Свойстваfile
,и не установленmultiple
свойство,Тогда он может принять только один файл. Это предполагает знание интерфейса,Брат Хун кратко упомянет здесь несколько вещей.,Я не буду вдаваться в подробности.,Заинтересованные друзья или дети могут сами проверить информацию, чтобы узнать больше.
Решение:
multiple
свойство: <input type="file" multiple>
Загрузка файлов — это сценарий, с которым нам часто приходится сталкиваться. Если мы используем селен, наша операция будет более сложной, поскольку некоторые загрузки файлов являются элементами управления вводом, а некоторые требуют, чтобы мы напрямую загрузили адрес файла, как только появится окно выбора файла. , , селен бессилен, и драматург может очень хорошо помочь нам решить эту проблему.
Хорошо, сегодня еще не очень рано. Брат Хун объяснит и расскажет здесь. Спасибо за ваше терпение в чтении.