📜  如何在 selenium 中上传 (1)

📅  最后修改于: 2023-12-03 15:24:22.726000             🧑  作者: Mango

如何在 Selenium 中上传文件

在使用 Selenium 进行自动化测试时,有时需要上传文件。本文将介绍如何使用 Selenium 进行文件上传。

准备工作

在进行文件上传前,需要先确定上传的文件路径。在本文的代码示例中,将使用相对路径 file.txt

步骤
1. 定位上传按钮

首先需要定位上传按钮,并使用 click() 方法触发上传功能。

upload_button = driver.find_element_by_xpath("//input[@type='file']")
upload_button.click()
2. 输入文件路径

接下来需要在文件上传对话框中输入文件路径。对于弹出的文件上传对话框,无法使用 Selenium 直接操作,但可以通过使用第三方工具 AutoItSikuli 来处理。

在本文的代码示例中,将使用 AutoIt 来模拟键盘操作输入文件路径。

import os
import autoit

current_directory = os.path.dirname(os.path.realpath(__file__))
file_path = os.path.join(current_directory, "file.txt")

autoit.win_wait_active("打开", 5)
autoit.control_send("打开", "Edit1", file_path + "{ENTER}")

上述代码中,current_directory 用于获取当前文件所在目录的路径,file_pathfile.txt 文件路径与当前文件所在目录的路径进行拼接得到文件的完整路径。接着使用 autoit.win_wait_active() 方法等待文件上传对话框出现,autoit.control_send() 方法模拟键盘操作输入文件路径,并使用 ENTER 键确认输入。

3. 确认上传文件

最后需要确认文件上传操作,可通过定位上传按钮,判断是否已成功上传文件。

upload_button = driver.find_element_by_xpath("//input[@type='file']")
file_name = upload_button.get_attribute("value")
assert file_name == file_path

上述代码中,使用 get_attribute() 方法获取已上传的文件路径,并将其与 file.txt 文件路径进行比较,验证文件上传是否成功。

完整代码示例

下面是完整的代码示例,供参考。

import os
import autoit
from selenium import webdriver

# 创建 WebDriver
driver = webdriver.Chrome()

# 打开待测网站
driver.get("https://example.com/upload")

# 定位上传按钮
upload_button = driver.find_element_by_xpath("//input[@type='file']")
upload_button.click()

# 输入文件路径
current_directory = os.path.dirname(os.path.realpath(__file__))
file_path = os.path.join(current_directory, "file.txt")

autoit.win_wait_active("打开", 5)
autoit.control_send("打开", "Edit1", file_path + "{ENTER}")

# 确认上传文件
upload_button = driver.find_element_by_xpath("//input[@type='file']")
file_name = upload_button.get_attribute("value")
assert file_name == file_path

# 关闭浏览器
driver.quit()

上述代码中,使用 webdriver.Chrome() 方法创建 Chrome WebDriver,打开待测网站,并定位上传按钮。接下来使用 AutoIt 模拟键盘输入文件路径,并确认文件上传操作是否成功。最后关闭浏览器。