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

yizhihongxing

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中的in操作符或列表(list)的count()方法来实现。以下是两个方法的详细说明: 方法一:使用in操作符 in操作符可以用来判断指定元素是否在数组中。如果存在,返回True;否则返回False。 下面是一个示例代码: # 创建一个数组 mylist = [1,2,3,4,5] #定义函数,判断指定元素是否在…

    python 2023年6月5日
    00
  • Python3实现转换Image图片格式

    当需要将图片格式进行转换时,可以使用Python3中的Pillow库进行操作。下面是详细的操作步骤: 步骤1:安装Pillow库 在终端中使用以下命令安装Pillow库: pip install Pillow 步骤2:导入Pillow库 在python文件中导入Pillow库: from PIL import Image 步骤3:打开图片 使用以下代码打开图…

    python 2023年5月18日
    00
  • 详解Python中的null是什么

    详解Python中的null是什么 在Python中,null是一个特殊的数据类型,用以表示不存在的变量或数值。在Python中,null被表示为None。 None的定义 None是Python中一个表示空值或无变量的特殊对象,它有自己的数据类型——NoneType。我们可以使用is关键字检查某个变量是否为None。 示例代码: >>> …

    python 2023年5月13日
    00
  • 对numpy的array和python中自带的list之间相互转化详解

    以下是“对numpy的array和python中自带的list之间相互转化详解”的完整攻略。 1. 将list转换为numpy的array 可以使用numpy中的array()函数将Python中自带的list转换为numpy的array。示例如下: import numpy as np my_list = [1, 2, 3, 4, 5] my_array …

    python 2023年5月13日
    00
  • Python Tkinter 简单登录界面的实现

    一、Python Tkinter 简单登录界面的实现 在Python中,可以通过Tkinter库来实现简单的GUI界面。下面以实现简单的登录界面为例进行讲解,并对实现过程进行详细讲解。 二、界面实现 界面实现主要分为两个部分:登录窗口的设计和登录按钮事件的实现。 登录窗口的设计: 导入Tkinter库 from tkinter import * 创建窗口对象…

    python 2023年6月13日
    00
  • Python中内建模块collections如何使用

    Python内建模块collections是一些有用的集合类容器,它们提供了更快、更方便的方法来处理一些常见的数据处理任务。在这里,我们将学习如何使用collections模块。 collections模块中的常用类 在collections模块中有几个常见的类,包括: Counter:用于计数,返回一个字典。 defaultdict:当字典中的key不存在…

    python 2023年5月14日
    00
  • python无法识别vim中文代码的解决方案

    下面是Python无法识别Vim中文代码的解决方案的攻略: 编辑Vim的配置文件 首先,我们需要在Vim的配置文件中添加以下代码, 这个代码指定了Python文件的编码格式为UTF-8: set fileencodings=utf-8 set encoding=utf-8 将文件的编码格式改为UTF-8 其次,需要将Python代码文件的编码格式改为UTF-…

    python 2023年5月20日
    00
  • Python爬虫爬取一个网页上的图片地址实例代码

    当我们使用Python进行爬取网页数据时,将其中的图片下载到本地或者进行进一步的图片处理也很有必要。因此,本文将通过一个实例代码来讲解在Python中如何爬取一个网页上的所有图片地址。 实现步骤 分析目标网页,确定需要的信息以及相关信息的所在位置。 使用requests库获取目标网页的HTML源代码。 使用BeautifulSoup库对HTML源代码进行解析…

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