您的位置:

Selenium上传文件的方法和技巧

Selenium作为广受欢迎的自动化测试工具,应用于各种Web应用程序的测试中。其中上传文件是自动化测试中常见的操作之一。本文将从多个方面详细阐述如何使用Selenium上传文件。

一、Selenium上传文件方法

Selenium提供了多种上传文件的方法,我们可以通过以下两个主要的方法来执行文件上传操作。

1.使用send_keys方法

Selenium的send_keys方法是最常用的上传文件方法之一。通过此方法,我们可以将要上传的文件路径作为参数传递给send_keys方法,然后模拟键盘操作上传文件。

from selenium import webdriver

driver = webdriver.Chrome()

driver.get("http://demo.guru99.com/test/upload/")

# 找到要上传的输入框并发送文件路径
driver.find_element_by_id("uploadfile_0").send_keys("C:/Users/testfile.txt")

# 点击上传按钮
driver.find_element_by_id("submitbutton").click()

2.使用AutoIT脚本

AutoIT是一个免费的开源工具,可以用于Windows GUI测试自动化。它可以帮助我们在模拟上传文件方面更为灵活,但需要安装对应的AutoIT插件。

import os

from selenium import webdriver

driver = webdriver.Chrome()

driver.get("http://demo.guru99.com/test/upload/")

# 打开上传文件的窗口
driver.find_element_by_id("uploadfile_0").click()

# 运行AutoIT脚本发送文件路径
os.system('C:/Users/uploadfile.exe')

# 点击上传按钮
driver.find_element_by_id("submitbutton").click()

二、Selenium自动化上传文件

使用Selenium自动化上传文件可以减少测试人员手动测试的工作量,同时提高测试的准确性。可以通过以下的方法来完成自动化上传的操作。

1.使用send_keys方法

通过send_keys方法,我们可以在测试代码中预定义文件路径,然后Selenium将文件上传到应用程序中, 可以结合unittest使用:

import unittest
from selenium import webdriver

class FileUploadTest(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.get("http://demo.guru99.com/test/upload/")

    def test_file_upload(self):
        driver = self.driver

        # 找到要上传的输入框并发送文件路径
        upload_element = driver.find_element_by_id("uploadfile_0")
        upload_element.send_keys("C:/Users/testfile.txt")

        # 点击上传按钮
        driver.find_element_by_id("submitbutton").click()

        # 确认处理结果
        assert "File Uploaded!" in driver.page_source

    def tearDown(self):
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()

2.使用AutoIT脚本

使用AutoIT脚本可以让测试人员更好的模拟用户上传文件,提高测试的准确性:

import os
import unittest
from selenium import webdriver

class FileUploadTest(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.get("http://demo.guru99.com/test/upload/")

    def test_file_upload(self):
        driver = self.driver

        # 打开上传文件的窗口
        driver.find_element_by_id("uploadfile_0").click()

        # 运行AutoIT脚本发送文件路径
        os.system('C:/Users/uploadfile.exe')

        # 点击上传按钮
        driver.find_element_by_id("submitbutton").click()

        # 确认处理结果
        assert "File Uploaded!" in driver.page_source

    def tearDown(self):
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()

三、Selenium上传文件等待进度

当文件大小较大时,文件上传可能需要一些时间。在这种情况下,需要等待上传进度完成,以便进行后续操作。通过设置上传文件的等待时间可以解决这个问题。

from selenium import webdriver

driver = webdriver.Chrome()

driver.get("http://demo.guru99.com/test/upload/")

# 找到要上传的输入框并发送文件路径
upload_element = driver.find_element_by_id("uploadfile_0")
upload_element.send_keys("C:/Users/testfile.txt")

# 显式等待上传文件完成,等待10秒
wait = WebDriverWait(driver, 10)
wait.until(ec.text_to_be_present_in_element((By.ID, "res"), "File Uploaded!"))

# 确认处理结果
assert "File Uploaded!" in driver.page_source

四、Selenium打开文件

在测试中,如果涉及到操作本地文件,我们需要使用Selenium来打开本地文件。我们可以通过如下方法来打开本地文件。

import os
from selenium import webdriver

driver = webdriver.Chrome()

# 打开本地文件
file = 'C:/Users/testfile.txt'
os.startfile(file)

五、Selenium下载文件

在自动化测试中,如果需要下载文件,在设置浏览器选项时需要将“下载”选项设置为可见,同时需要指定文件的下载路径。

from selenium import webdriver

chrome_options = webdriver.ChromeOptions()

# 将“下载”选项设置为可见
chrome_options.add_experimental_option("prefs", {
    "download.default_directory": "C:/Users/Downloads",
    "download.prompt_for_download": False,
    "download.directory_upgrade": True,
    "safebrowsing.enabled": True
})

driver = webdriver.Chrome(options=chrome_options)
driver.get("http://demo.guru99.com/test/file_download.php")

# 点击下载按钮
driver.find_element_by_xpath("//a[text()='Download Test File']").click()

六、Selenium如何进行文件上传

当通过SendKeys方法上传文件时,需要输入文件的绝对路径。此时可以使用os、os.path和os.environ等模块来实现相应的操作。

import os
from selenium import webdriver

driver = webdriver.Chrome()

driver.get("http://demo.guru99.com/test/upload/")

# 获取当前文件所在的路径
dir_path = os.path.dirname(os.path.realpath(__file__))

# 拼接要上传的文件的绝对路径
file_path = os.path.join(dir_path, "testfile.txt")

# 找到文件输入框并发送文件路径
upload_element = driver.find_element_by_id("uploadfile_0")
upload_element.send_keys(file_path)

# 点击上传按钮
driver.find_element_by_id("submitbutton").click()

七、SeleniumJS插件上传

我们可以使用JavaScript插件来实现Selenium文件上传。下面是一个使用JavaScript来上传文件的示例:

from selenium import webdriver

driver = webdriver.Chrome()

driver.get("http://demo.guru99.com/test/upload/")

# 执行JS脚本上传文件
js_script = 'document.getElementById("uploadfile_0").style.display="block";'
driver.execute_script(js_script)

js_script = 'arguments[0].style.visibility="visible";'
upload_element = driver.find_element_by_id("uploadfile_0")
driver.execute_script(js_script, upload_element)

js_script = 'arguments[0].style.height="10px"'
driver.execute_script(js_script, upload_element)

upload_element.send_keys("C:/Users/testfile.txt")

# 点击上传按钮
driver.find_element_by_id("submitbutton").click()

八、Selenium组件选取

Selenium组件选取功能可以通过select类来实现。下面是一个示例:

from selenium import webdriver
from selenium.webdriver.support.ui import Select

driver = webdriver.Chrome()
driver.get("https://www.w3schools.com/tags/tryit.asp?filename=tryhtml_select")

driver.switch_to.frame("iframeResult")
select_element = driver.find_element_by_xpath("//select[@id='cars']")
dropdown = Select(select_element)
dropdown.select_by_visible_text('Volvo')

总结

本文详细阐述了如何使用Selenium上传文件,并讲解了多种上传文件的方法和技巧。同时也介绍了如何自动化上传文件、等待进度、打开文件、下载文件、文件拼接和组件选取等操作。当我们掌握了这些技巧后,我们可以在自动化测试中更好的操作文件上传功能。

Selenium上传文件的方法和技巧

2023-05-16
java方法整理笔记(java总结)

2022-11-08
python技巧笔记(python自学笔记)

2022-11-12
印象笔记记录java学习(Java成长笔记)

2022-11-12
java笔记,尚硅谷java笔记

2022-12-01
重学java笔记,java笔记总结

2022-11-23
python基础学习整理笔记,Python课堂笔记

2022-11-21
java笔记,大学java笔记

2022-11-28
java学习笔记(java初学笔记)

2022-11-14
用Selenium实现自动登录的技巧和方法

2023-05-17
用Java Selenium优化网页搜索引擎排名的技巧

2023-05-19
Selenium下载文件

2023-05-21
python的用法笔记本(笔记本学python)

2022-11-16
了解Typora PicGo :实现快捷上传和管理笔记中的图

2023-05-21
javascript简要笔记,JavaScript读书笔记

2022-11-17
js高级程序设计笔记14(js高级程序设计笔记14页)

本文目录一览: 1、JavaScript高级程序设计 该怎么看 2、JavaScript学习笔记之数组基本操作示例 3、JS中有关sort以及return的问题 JavaScript高级程序设计 该怎

2023-12-08
使用Selenium等待元素出现无法正常运行的解决方法

2023-05-10
使用Jupyter调试Python代码的方法和技巧

2023-05-16
postman上传文件和json参数的简单介绍

本文目录一览: 1、postman怎么发送json参数 2、postman如何导入json文件 3、json和普通字段怎么一起传 4、postman 怎么提交json数据 5、postman上传文件应

2023-12-08
htmljs编程笔记(html代码笔记)

本文目录一览: 1、html代码和JS代码有什么区别 2、如何在html中调用js函数 3、JavaScript学习笔记之数组基本操作示例 4、HTML5初学者笔记 5、《web前端笔记7》js字符—

2023-12-08