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上傳文件,並講解了多種上傳文件的方法和技巧。同時也介紹了如何自動化上傳文件、等待進度、打開文件、下載文件、文件拼接和組件選取等操作。當我們掌握了這些技巧後,我們可以在自動化測試中更好的操作文件上傳功能。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/182342.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-24 06:20
下一篇 2024-11-24 06:20

相關推薦

  • 使用vscode建立UML圖的實踐和技巧

    本文將重點介紹在使用vscode在軟體開發中如何建立UML圖,並且給出操作交互和技巧的指導。 一、概述 在軟體開發中,UML圖是必不可少的重要工具之一。它為軟體架構和各種設計模式的…

    編程 2025-04-29
  • 解決.net 6.0運行閃退的方法

    如果你正在使用.net 6.0開發應用程序,可能會遇到程序閃退的情況。這篇文章將從多個方面為你解決這個問題。 一、代碼問題 代碼問題是導致.net 6.0程序閃退的主要原因之一。首…

    編程 2025-04-29
  • ArcGIS更改標註位置為中心的方法

    本篇文章將從多個方面詳細闡述如何在ArcGIS中更改標註位置為中心。讓我們一步步來看。 一、禁止標註智能調整 在ArcMap中設置標註智能調整可以自動將標註位置調整到最佳顯示位置。…

    編程 2025-04-29
  • Python創建分配內存的方法

    在python中,我們常常需要創建並分配內存來存儲數據。不同的類型和數據結構可能需要不同的方法來分配內存。本文將從多個方面介紹Python創建分配內存的方法,包括列表、元組、字典、…

    編程 2025-04-29
  • Python中init方法的作用及使用方法

    Python中的init方法是一個類的構造函數,在創建對象時被調用。在本篇文章中,我們將從多個方面詳細討論init方法的作用,使用方法以及注意點。 一、定義init方法 在Pyth…

    編程 2025-04-29
  • 用不同的方法求素數

    素數是指只能被1和自身整除的正整數,如2、3、5、7、11、13等。素數在密碼學、計算機科學、數學、物理等領域都有著廣泛的應用。本文將介紹幾種常見的求素數的方法,包括暴力枚舉法、埃…

    編程 2025-04-29
  • 使用Vue實現前端AES加密並輸出為十六進位的方法

    在前端開發中,數據傳輸的安全性問題十分重要,其中一種保護數據安全的方式是加密。本文將會介紹如何使用Vue框架實現前端AES加密並將加密結果輸出為十六進位。 一、AES加密介紹 AE…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • Python學習筆記:去除字元串最後一個字元的方法

    本文將從多個方面詳細闡述如何通過Python去除字元串最後一個字元,包括使用切片、pop()、刪除、替換等方法來實現。 一、字元串切片 在Python中,可以通過字元串切片的方式來…

    編程 2025-04-29
  • 用法介紹Python集合update方法

    Python集合(set)update()方法是Python的一種集合操作方法,用於將多個集合合併為一個集合。本篇文章將從以下幾個方面進行詳細闡述: 一、參數的含義和用法 Pyth…

    編程 2025-04-29

發表回復

登錄後才能評論