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/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

发表回复

登录后才能评论