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上传文件,并讲解了多种上传文件的方法和技巧。同时也介绍了如何自动化上传文件、等待进度、打开文件、下载文件、文件拼接和组件选取等操作。当我们掌握了这些技巧后,我们可以在自动化测试中更好的操作文件上传功能。