Selenium系列教程 - AutoIt命令行参数

2023-10-30


Selenium对网页进行UI自动化时经常会遇到Windows弹框,比如上传、下载框,对于这种弹框,Selenium无法处理,我们常常会选择AutoIt这个工具。

一、AutoIt下载安装

AutoIt目前最新是v3版本,这是一个使用类似BASIC​​脚本语言​​的​ 免费软件​​,它设计用于Windows GUI(​​图形用户界面​​)中进行自动化操作。它利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动化任务。
下载链接
在这里插入图片描述
选择安装路径即可,其他默认安装。安装后在程序中可以找到这些应用。
在这里插入图片描述

AutoIt Windows Info       用于帮助我们识Windows控件信息。
Compile Script to.exe     用于将AutoIt生成 exe 执行文件。
Run Script                用于执行AutoIt脚本。
SciTE Script Editor       用于编写AutoIt脚本。

二、AutoIt使用

以操作文件上传弹出的窗口为例讲解AutoIt实现上传过程。

1、识别控件

首先打开AutoIt Windows Info 工具,鼠标点击Finder Tool,鼠标将变成一个小风扇形状的图标,按住鼠标左键拖动到需要识别的控件上。
在这里插入图片描述
在这里插入图片描述
通过AutoIt Windows Info 获得以下信息。
窗口的title为“打开”,标题的Class为“#32770”。
文件名输入框的class 为“Edit”,Instance为“1” ,所以ClassnameNN为“Edit1”。
打开按钮的class 为“Button”,Instance为“1” ,所以ClassnameNN为“Button1”。

2、编写脚本

根据AutoIt Windows Info 所识别到的控件信息打开SciTE Script Editor编辑器,编写脚本。

;该脚本的写法是 ';'是注释会注释后面的内容,所以单行结尾加不加';'都可以
    ;ControlFocus ( "title", "窗口文本", controlID)   设置输入焦点到指定窗口的某个控件上;
    ;WinWait ( "title题" , "窗口文本" , 超时时间 )     暂停脚本的执行直至指定窗口存在(出现)为止;
    ;ControlSetText ( "title", "窗口文本", controlID, "新文本" )    修改指定控件的文本;
    ;Sleep ( 延迟 )   使脚本暂停指定时间段;
    ;ControlClick ( "title", "窗口文本", 控件ID , 按钮 , 点击次数 )  向指定控件发送鼠标点击命令;
    ;其中,title即AutoIt Window Info识别出的Title字段,controlID即AutoIt Window Info识别出的Class和Instance的拼接,如上图拼接后的结果应为:Button1;

;title必须对应正确即窗口的title,"text"可写可不写,
ControlFocus("打开","text","Edit1")
WinWait("[CLASS:#32770]","",10)
;ControlSetText("打开","","Edit1","C:\Users\Administrator\Desktop\test\upload_file.txt")  这里的“text” 不必写,写就不能正确执行了
ControlSetText("打开","","Edit1","C:\Users\Administrator\Desktop\test\upload_file.txt")
Sleep(2000)
ControlClick("打开","","Button1")

在这里插入图片描述

ControlFocus()方法用于识别Window窗口。
WinWait()设置10秒钟用于等待窗口的显示,其用法与WebDriver所提供的implicitly_wait()类似。
ControlSetText()用于向“文件名”输入框内输入本地文件的路径。
Sleep()方法与Python中time模块提供的Sleep()方法用法一样,不过它是以毫秒为单位,Sleep(2000)表示固定休眠2000毫秒。
ControlClick()用于点击上传窗口中的“打开”按钮。

AutoIt的脚本已经写好了,可以通过菜单栏“Tools”–>“Go” (或按键盘F5)来运行一下脚本吧!注意在运行时上传窗口当前处于打开状态。运行后即可看到会自动输入文件路径并自动点击“打开”完成文件上传。

3、生成exe程序

保存的脚本可以通过Run Script 工具将其打开运行,但我们的目的是希望这个脚本被Python程序调用,那么就需要将其生成exe程序。打开Compile Script to.exe工具,将其生成为exe可执行文件。
在这里插入图片描述

三、通过命令行执行

为了演示AutoIt命令行参数,我们这里修改一下脚本,把上传的文件路径修改成$CmdLine[1],然后重新生成exe程序。

代码:

ControlFocus("文件上传", "", "Edit1")
WinWait("[CLASS:#32770]", "", 10)
ControlSetText("文件上传" ,"", "Edit1", $CmdLine[1])
Sleep(2000)
ControlClick("文件上传", "","Button1");

CMD命令:upload.exe "C:\Users\Administrator\Desktop\test\upload_file.txt"

在脚本中,$CmdLine[0] 获取的是命令行参数的总数,$CmdLine[1]~$CmdLine[63] 获取的是命令行参数第1到第63位,这个方式最多只能获取63个参数,不过正常情况下是足够用的,$CmdLineRaw 获取的是未拆分的所有参数。
在上例中,$CmdLine[0]=1$CmdLine[1]="C:\Users\Administrator\Desktop\test\upload_file.txt"$CmdLineRaw=upload.exe "C:\Users\Administrator\Desktop\test\upload_file.txt"
在这里插入图片描述

四、通过Python用os模块调用

接下来就是通过Python用os模块的system()方法来调用exe程序并执行:

import os
import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.get('http://sahitest.com/demo/php/fileUpload.htm')
# 点击“选择文件”按钮
driver.find_element_by_css_selector('form>#file').click()
# 调用exe上传文件
command = "upload.exe  C:\Users\Administrator\Desktop\test\upload_file.txt"
os.system(command)
# 点击“Submit Single”按钮
driver.find_element_by_css_selector('form>input[type="submit"]').click()

time.sleep(3)
driver.quit()

更多文件上传的处理方法请参见 Selenium系列教程 - 文件上传

在这里插入图片描述


在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Selenium系列教程 - AutoIt命令行参数 的相关文章

  • Selenium WebDriver - 意外的模式对话框警报

    我正在尝试使用 WebDriver 来自动化网站 我正在使用 Firefox 驱动程序 但主页有一个弹出模式警报窗口 显示 您需要使用 IE 6 0 才能查看此应用程序 还有一些 功能可能无法使用 我检查了页面的来源 它有一个功能 Moda
  • Selenium 不会在新选项卡中打开新 URL(Python 和 Chrome)

    我想使用 Selenium WebDriver 和 Python 在不同的选项卡中打开相当多的 URL 我不确定出了什么问题 driver webdriver Chrome driver get url1 time sleep 5 driv
  • 需要可见元素的 xpath 定位器

    我正在尝试对我的网站进行测试 在某些用户表单上遇到问题 诀窍是 表单中文本字段的数量根据用户选项的不同而变化 代码中存在禁用的文本字段 但样式为 displayed none gt 标签 所以我试图找到比逐一定位每个元素并用 try exc
  • 检测到通过 ChromeDriver 启动的 Chrome 浏览器

    我正在尝试在 python 中使用 selenium chromedriver 来访问 www mouser co uk 网站 然而 从第一次拍摄开始 它就被检测为机器人 有人对此有解释吗 此后我使用的代码 options Options
  • 如何设置 Firefox 配置文件:Selenium RC、.Net 客户端驱动程序?

    我正在使用 Selenium RC Net 客户端驱动程序 我在 c selenium 目录中创建了一个 Firefox 配置文件 这是我的代码 Dim MySelenium As ISelenium Nothing MySelenium
  • Perl 和 Selenium::远程::驱动程序

    再次编辑 我在弗吉尼亚州北部某处的 AWS 上有一台服务器 这是我的监控服务器 我从另一个状态 ssh 进入这个 Ubuntu 服务器来进行系统管理 我想在这台服务器上进行 Web 自动化测试 它将测试互联网上的 Web 应用程序 点击 U
  • Selenium c#:如何在特定版本中启动 Internet Explorer 驱动程序(例如 IE8)

    在 java 中 可以通过传递所需的功能来设置 Internet Explorer 驱动程序的 IE 版本 这在 C 中不起作用 我希望它看起来像这样 DesiredCapabilities ieCapabilities null ieCa
  • 如何获取 WebElement 的父级[重复]

    这个问题在这里已经有答案了 我试过了 private WebElement getParent final WebElement webElement return webElement findElement By xpath 但我得到
  • 运行多个并行 Selenium WebDriver 会话

    我想知道我们是否能够运行两个 Selenium WebDriver 会话 或者如何使用同一个 WebDriver 处理两个浏览器窗口并并行运行它们 尝试像下面这样定义您的 TestNg 套件 然后它将同时开始运行两者
  • find_element_by_* 命令在 Selenium 中已弃用

    启动功能时 def run driver path driver webdriver Chrome executable path driver path driver get https tproger ru quiz real prog
  • 如何使用 python 让 selenium 同时按下 Shift + Enter 键盘?

    我制作了一个 Whatsapp 机器人和一个网络爬虫来获取冠状病毒病例 我想在换行符上发送每个数据 例如 Cases x 死亡人数 是 回收 z 但由于我使用的是 Whatsapp n 不起作用 并且会发送每一行 我也尝试过 ActionC
  • watir selenium:浏览器构造函数无法识别的参数

    在我的 Rails 应用程序中 我有一个 nokogiri watir 爬虫 运行良好 在我升级了 gems 也升级了例如 selenium 后 当我使用以下命令打开爬虫浏览器时 BROWSER OPTIONS w headless no
  • 使用 WebDriver 暂时绕过隐式等待

    当使用隐式等待时 正如这里所建议的 https stackoverflow com a 10950905 56285 我仍然有时想要断言即时元素不可见或不存在 换句话说 我know有些元素应该隐藏 并希望我的测试做出这样的断言fast 而不
  • 如何使用 WebDriver 移动光标位置

    我正在开发 Liferay 6 2 项目 在 Liferay 中 他们使用 Vaadin 当我点击一个按钮时 它会打开一个不同的 iframe 我可以编写所有功能的代码 现在我想使用 WebDriver 将光标移动到 iframe 元素 因
  • 使用输入按钮处理网站上的分页

    试图使用硒抓取这个网站 我的代码可以工作 但目前它只抓取第一页 该页面使用输入按钮作为浏览页面的一种方式 因此我想逐个单击每个按钮 但它不起作用 有没有人有任何其他方法来处理此类分页的导航 import requests from sele
  • Selenium 如何按类选择对象

    我有一个带有表单的网页 并且有一个使用 jquery 自动完成功能的字段 这是用户名返回 1 个或多个结果后 HTML 的呈现方式 但是我不知道如何使 Selenium 点击 结果 我可以做一个 jQuery 类型的选择器吗 例如 ul u
  • Internet Explorer Selenium Protractor e2e 测试

    我想在我们的 CI 构建过程中添加一些 e2e 测试 我已经针对 chrome firefox 添加了它们 作为最简单的 但我真的很想为几个 IE 版本做这件事 如何在 linux mac 上的构建过程中注入它 我发现这样的文章 http
  • 如何在Python Selenium中获取WebElement的类名?

    我使用 Selenium WebDriver 来抓取从网页中获取的 用 JavaScript 编写的表格 我正在迭代表行列表 每行可能属于不同的类别 我想获取此类的名称 以便我可以为每一行选择适当的操作 table body table f
  • 如何仅获取元素 id - 使用 Selenium WebDriver 2

    编辑 我也尝试过这个 var webElements1 Driver FindElements By XPath id ctl00 ContentPlaceHolder1 Control1 lstCategory input ToList
  • C# 和断点 - 这里有魔术师吗?

    我有这个 public static void ByLinkText string text for var i 0 i lt 50 i try Setup Driver FindElement By LinkText text Click

随机推荐

  • 1-Linux_虚拟机VMware 15安装教程

    虚拟机VMware 15安装教程 https www onlinedown net soft 2062 htm 1 由上面的网址下载VMware 15后双击运行安装程序点击下一步 进行安装 2 在最终用户许可协议界面选中 我接受许可协议中的
  • 为什么要用TSubClassOf

    2019独角兽企业重金招聘Python工程师标准 gt gt gt TSubclassOf 是提供 UClass 类型安全性的模板类 例如您在创建一个投射物类 允许设计者指定伤害类型 您可只创建一个 UClass 类型的 UPROPERTY
  • vsocde vue snippet 设置

    vue snippt 设置 建议下在一个 vetur extensions 1 首先打开 vue json 文件 ctrl p 搜索 vue json 文件 enter File gt preferences gt User sneppts
  • MSBuild入门

    MSBuild是什么 MSBuild全称 Microsoft Build Engine 是用于构建应用程序的平台 您可能不知道它 但是如果您在使用VS做开发 那么一定时时刻刻在使用它 因为是它在背后为你管理生成你的项目文件 当新建一个项目时
  • ARM汇编指令集·带例题

    目录 32位ARM汇编指令集 32位数据操作指令 32位存储器数据传送指令 32位转移指令 其它32位指令 指令具体用法 数据处理指令 MOV指令 ADD指令 SUB指令 MUL指令 CMP指令 ORR逻辑或 BIC指令 转移指令 B指令
  • Maven进阶-配置私服(Nexus 的使用)

    Maven进阶 配置私服 Nexus 的使用 引言 一 Nexus 的下载 二 Nexus 启动服务器 三 首次配置 Nexus 四 新建仓库 五 设置仓库组 六 仓库的 URL 七 Maven 的配置 1 配置 mirror 2 配置 s
  • mysql select into 新表_SELECT INTO 语句数据表全表复制备份

    select into 语句数据表全表复制备份 select into 语句常用于创建表的备份复件或者用于对记录进行存档 sql select into 语法 您可以把所有的列插入新表 select into new table name
  • C++replace_all strip函数

    replace all occurance of t in s to w void replace all std string s std string const t std string const w string size typ
  • python语言需要注意的几点

    keyword kwlist可以打印出python所有关键字 import keyword print keyword kwlist 不需要使用大括号 但必须对齐 if True print Answer print True else p
  • 接口测试的标准和规范性

    一 接口测试测试点 1 要考虑接口的正常调用 1 按照接口定义 传递正确的接口信息 包括地址 方法 传输数据 然后查看接口返回的响应结果是否正确 数据库的数据是否正确 2 传递的请求数据需要覆盖有效类 边界值 3 返回的响应结果的每个字段都
  • Nginx简介及配置文件详解

    一 Nginx简介 Nginx是一款开源代码的高性能HTTP服务器和反向代理服务器 同时支持IMAP POP3 SMTP代理服务 1 Nginx工作原理 Nginx由内核和模块组成 完成工作是通过查找配置文件将客户端请求映射到一个locat
  • TCP 几个字段含义

    1 tcp out of order tcp有问题 2 tcp segment of a reassembled PDU 3 Tcp previous segment lost tcp先前的分片丢失 4 Tcp acked lost seg
  • 双指针简化双for循环系列(一)27.移除元素

    https leetcode cn com problems remove element class Solution public int removeElement int nums int val 快慢指针 int fastInde
  • 输入/选择自动聚焦放大引起的问题

    加一行
  • 执行docker-compose -V报错及升级后报/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28‘ not found问题解决记录

    在试用一个开源项目时需要用到docker compose 执行项目提供的脚本 gt docker up sh Builds re creates starts and attaches to containers for a service
  • C# 文件相关---新建文件、文件另存为、读写文件

    判断文件夹是否存在 using System IO string path D WorkStation if Directory Exists path 文件夹存在 int i 0 新建空文件夹 System IO Directory Cr
  • Unity:异步加载场景资源进度界面

    创建加载界面LoadingScene 用于处理加载进度条 导入NGUI资源包 在Unity3D菜单栏中选中NGUI Open Prefab Toolbar 在Prefab Toolbar窗口中 选中Control Colored Progr
  • 部分选主元 LU 分解,CGETRF in lapack 选主元时调用 ICAMAX

    ICAMAX finds the index of the first element having maximum Re Im 也就是找出一列 complex 类型的数据中 实部的绝对值 虚部的绝对值 最大的那个元素 这样选出来的主元也还
  • 学习记录——关UNet、特征图add、cat、相乘、三个 注意力

    关于UNet网络 这部分有利于将下采样的各个阶段的信息在上采样过程中进行整合 就是在上采样的过程中 结合了各个层次的结构信息 通俗的来讲就是在网络的高层 就是U型的上部分 获取了图形的细节信息 因为这时候图片很大 很多细节可以得以保留 在网
  • Selenium系列教程 - AutoIt命令行参数

    主要内容 一 AutoIt下载安装 二 AutoIt使用 1 识别控件 2 编写脚本 3 生成exe程序 三 通过命令行执行 四 通过Python用os模块调用 Selenium对网页进行UI自动化时经常会遇到Windows弹框 比如上传