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上傳文件,並講解了多種上傳文件的方法和技巧。同時也介紹了如何自動化上傳文件、等待進度、打開文件、下載文件、文件拼接和組件選取等操作。當我們掌握了這些技巧後,我們可以在自動化測試中更好的操作文件上傳功能。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/182342.html