selenium+python自动化78-autoit参数化与批量上传功能的实现

Selenium+Python自动化78-AutoIt参数化与批量上传功能的实现

在使用Selenium进行自动化测试时,我们经常会遇到上传文件的场景。然而,使用Selenium自带的上传文件的方式,需要耗费大量的时间,因此我们可以使用AutoIt工具结合Selenium进行自动化测试来实现上传文件的功能。AutoIt是一种存在于Windows操作系统下的免费WARE开源软件。AutoIt可以被用于自动运行任务、提交表单等操作,它使用了一种小型的基于脚本的语言,和其他编程语言相比,学习曲线更加平缓,学习起来也比较容易。

实现步骤

  1. 下载AutoIt:从官网https://www.autoitscript.com/site/autoit/downloads/下载AutoIt安装包
  2. 安装AutoIt:下载完成后,解压到指定目录,即安装完成。
  3. 安装SciTE工具:SciTE是一个由AutoIt官方提供广泛支持的编辑器,可以用于自动化脚本的开发。下载把SciTE.exe放置于安装目录即可,例如:D:\AutoIt3\SciTE\SciTE.exe。
  4. 安装AutoItX3.dll:AutoItX3.dll是AutoIt的插件。在Python中,需要使用pywin32和win32com组件来调用AutoItX3.dll。
  5. 编写AutoIt脚本:编写AutoIt脚本,来实现文件上传的操作。例如,以下是上传图片的脚本:
$var = WinWaitActive("[CLASS:#32770]", "打开")
ControlSetText("[CLASS:#32770]", "", "[CLASS:Edit; INSTANCE:1]", "D:\image.png")
ControlClick("[CLASS:#32770]", "", "[CLASS:Button; INSTANCE:1]")

在上传文件时,我们只需要调用这段AutoIt脚本即可。这个脚本中的三个参数分别为窗口类、窗口名称和控件名称。

  1. 集成AutoIt和Selenium:在Python中,使用pywin32和win32com组件来调用AutoItX3.dll,来实现脚本的调度。具体操作可以参考以下代码示例:
import win32com.client

class AutoIt:
    auto_it = None
    wsh = None

    def __init__(self):
        # 初始化AutoIt
        self.auto_it = win32com.client.Dispatch("AutoItX3.Control")
        self.wsh = win32com.client.Dispatch("WScript.Shell")

    def win_wait(self, window_title, timeout=60):
        """
        等待窗口出现
        """
        self.auto_it.WinWait(window_title, "", timeout)

    def win_set_title(self, window_title, new_title):
        """
        设置窗口标题
        """
        self.auto_it.WinSetTitle(window_title, "", new_title)

    def control_click(self, window_title, control, x=0, y=0, button="left", clicks=1):
        """
        点击窗口控件
        """
        self.win_wait(window_title)
        self.auto_it.ControlClick(window_title, "", control, button, clicks, x, y)

    def control_set_text(self, window_title, control, value):
        """
        设置窗口控件的值
        """
        self.win_wait(window_title)
        self.auto_it.ControlSetText(window_title, "", control, value)

    def send_keys(self, keys):
        """
        发送按键
        """
        self.wsh.SendKeys(keys)

示例

以下示例使用了AutoIt和Selenium结合的方式实现了批量上传文件的功能:

import os
import time
import win32api
import win32con
import win32com.client

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions

from autoit import AutoIt


# 模拟浏览器进行上传文件
def upload_file(driver, file_path):
    # 控制浏览器滚动至上传控件元素
    upload_element = driver.find_element_by_xpath('//div[@class="file-upload"]//input')
    ActionChains(driver).move_to_element(upload_element).perform()

    # 点击上传控件元素,调起系统文件选择对话框
    upload_element.click()

    # 使用AutoIt工具,操作系统文件选择对话框,选择目标文件并上传
    auto_it = AutoIt()
    auto_it.win_wait("打开", 5)
    auto_it.control_set_text("打开", "[CLASS:Edit; INSTANCE:1]", file_path)
    auto_it.control_click("打开", "[CLASS:Button; INSTANCE:1]")

    wait = WebDriverWait(driver, 120)
    wait.until(expected_conditions.invisibility_of_element_located((By.XPATH, '//div[@class="ant-spin-container"][ancestor::nz-upload]')))
    time.sleep(1)


if __name__ == '__main__':
    # 加载Firefox geckodriver,开启Firefox浏览器
    driver_path = os.path.join(os.getcwd(), 'geckodriver.exe')
    browser = webdriver.Firefox(executable_path=driver_path)
    browser.implicitly_wait(10)

    # 打开上传应用
    browser.get("http://localhost:8080/upload")
    browser.maximize_window()

    # 确认上传页面已经打开
    assert "Upload Files" in browser.title

    # 点击上传文件按钮,上传文件
    upload_file(browser, os.path.join(os.getcwd(), 'Upload_file.txt'))
    upload_file(browser, os.path.join(os.getcwd(), 'Upload_file2.txt'))

    # 关闭浏览器
    browser.quit()

以上示例,在使用AutoIt脚本和Selenium结合的方式之后,实现了批量上传文件的功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:selenium+python自动化78-autoit参数化与批量上传功能的实现 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • python实现爬取图书封面

    Python实现爬取图书封面是一个非常有用的应用场景,可以帮助用户快速获取图书封面图片。本攻略将介绍Python实现爬取图书封面的完整攻略,包括数据获取、数据处理、数据存储和示例。 步骤1:获取数据 在Python中,我们可以使用requests库获取网页数据。以下是获取豆瓣图书页面的示例: import requests url = ‘https://bo…

    python 2023年5月15日
    00
  • pip报错“ModuleNotFoundError: No module named ‘pip._vendor.lockfile’”怎么处理?

    当使用pip安装Python包时,可能会遇到“ModuleNotFoundError: No module named ‘pip._vendor.lockfile’”错误。这个错误通常是由以下原因之一引起的: pip版本过低:如果您的pip版本过低,则可能会出现此错误。在这种情况下,需要升级pip版本。 pip安装文件损坏:如果pip安装文件损坏,则可能会出…

    python 2023年5月4日
    00
  • 详解用python自制微信机器人,定时发送天气预报

    详解用Python自制微信机器人,定时发送天气预报 介绍 随着互联网和移动设备的普及,微信成为了人们日常生活中必不可少的工具之一。在这个基础上,越来越多的开发者开始尝试利用微信公众平台开发一些有趣的应用,其中就包括微信机器人。 本文将详细讲解如何用Python自制微信机器人,并实现定时发送天气预报的功能。 准备工作 在开始之前,我们需要准备以下工具和资料: …

    python 2023年5月30日
    00
  • pyqt5 QlistView列表显示的实现示例

    PyQt5 QListView列表显示的实现示例 在PyQt5中,我们可以使用QListView控件来实现列表的显示。本攻略将详细介绍如何使用QListView控件实现列表的显示。 创建QListView控件 以下是示例代码,演示如何创建一个ListView控件: import sys from PyQt5.QtWidgets import QApplica…

    python 2023年5月13日
    00
  • python pandas中if else语句的lambda函数[重复]

    【问题标题】:lambda function of if else statement in python pandas [duplicate]python pandas中if else语句的lambda函数[重复] 【发布时间】:2023-04-03 09:05:01 【问题描述】: 我想根据特定条件覆盖一个变量,其他情况保持原来的值。 在伪代码中:如果年…

    Python开发 2023年4月8日
    00
  • 如何使用Python连接和操作MongoDB数据库?

    在Python中,可以使用pymongo模块连接和操作MongoDB数据库。以下是Python使用pymongo模块连接和操作MongoDB数据库的完整攻略,包括连接MongoDB数据库、插入数据、查询数据、和删除数据等操作。 连接MongoDB数据库 在Python中,可以使用pymongo模块连接MongoDB数据库。以下是连接MongoDB数据库的基本…

    python 2023年5月12日
    00
  • python之js逆向功能演示详解

    Python之JS逆向功能演示详解 简介 本文主要讲解如何使用Python对页面中的JS进行逆向分析和破解,通过实例演示来加深理解。具体包括以下内容: 如何使用开发者工具查看页面中的JS代码; 如何用Python解析JavaScript代码,提取数据; 如何使用Selenium + chromedriver模拟浏览器执行JS代码,从而进行自动化操作。 示例1…

    python 2023年6月3日
    00
  • Python 实现自动获取种子磁力链接方式

    Python实现自动获取种子磁力链接方式是指使用Python编程语言,通过爬虫技术自动获取种子磁力链接的方法。本文将讲解Python实现自动获取种子磁力链接方式的完整攻略,包括以下几个方面: 确定目标网站和爬虫策略 使用Python爬虫库获取网页内容 使用正则表达式或解析库提取种子磁力链接 实践示例 确定目标网站和爬虫策略 首先,我们需要确定目标网站和爬虫策…

    python 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部