AirtestIDE 实战指南:从零构建你的首个Web自动化测试脚本

如果你刚接触自动化测试,面对一堆陌生的工具和概念感到无从下手,那么这篇文章就是为你准备的。AirtestIDE 以其直观的图像识别和低代码特性,成为了许多测试新手快速上手的首选工具。今天,我们不谈复杂的理论,直接从一次真实的Web自动化测试实战出发,手把手带你配置环境、编写脚本、解决常见问题,并最终生成一份清晰的可视化报告。整个过程,我们力求在5分钟内让你看到第一个脚本成功运行的效果。

这篇文章面向的是希望快速入门Web自动化测试的工程师、测试人员以及对自动化感兴趣的技术爱好者。我们将聚焦于 Chrome浏览器 的自动化,因为它是目前最主流的浏览器,也是AirtestIDE对Web自动化支持最完善的环境。你将学到的不只是点击和输入,更包括如何高效地利用IDE的辅助功能、规避新手常踩的坑,以及让脚本更健壮的技巧。

1. 环境搭建与核心配置:避开第一个“拦路虎”

万事开头难,对于AirtestIDE的Web自动化来说,这个“难”往往就卡在环境配置上。很多新手满怀热情地打开软件,却在第一步“启动浏览器”时就遇到了 unknown error: cannot find Chrome binary 这样的错误。别担心,这几乎是所有人的必经之路,解决起来并不复杂。

1.1 获取与启动AirtestIDE

AirtestIDE是一款绿色软件,无需安装,解压即用。你可以从其官方网站下载最新的Windows版本。解压后,直接运行目录下的 AirtestIDE.exe 即可。

首次启动时,你可能会看到一个清爽但略显复杂的界面。别被吓到,我们目前只关注几个核心区域:

  • 设备窗口:通常位于右侧,用于连接和显示待测设备(对于Web测试,这里将显示浏览器窗口)。
  • 脚本编辑器:中间的主区域,用于编写和查看Python脚本。
  • 辅助窗口面板:位于左侧,通过菜单栏的“窗口”选项可以打开,这是我们进行Web自动化的“武器库”。

1.2 关键一步:启用Selenium窗口并配置Chrome路径

这是Web自动化配置的核心,两步缺一不可。

第一步:启用Selenium窗口 在IDE顶部菜单栏,依次点击 窗口 -> Selenium Window。勾选后,左侧辅助窗口区域会出现一个新的标签页,里面包含了 初始化、touch、text、assert 等针对Web操作的快捷按钮。这个窗口是我们后续录制和插入代码片段的得力助手。

第二步:配置Chrome浏览器路径(解决90%的启动问题)

  1. 再次点击顶部菜单栏的 选项 -> 设置。
  2. 在弹出的设置窗口中,找到左侧的 Selenium 分类。
  3. 在右侧找到 Chrome Path 的输入框。这里需要填入你电脑上 chrome.exe 的完整路径,而不是 chromedriver.exe 的路径。

如何找到这个路径?一个简单的方法是:

  • 在Windows搜索栏输入 chrome,右键点击Chrome浏览器图标,选择“打开文件位置”。
  • 在打开的文件夹中,再次右键点击Chrome快捷方式,选择“属性”。
  • 在“目标”一栏,你就能看到类似 "C:\Program Files\Google\Chrome\Application\chrome.exe" 的路径,复制它(注意包含引号)粘贴到AirtestIDE的设置中即可。

注意:如果你使用的是便携版Chrome或安装在其他非标准目录,务必手动找到准确的 chrome.exe 路径。路径错误是导致浏览器无法启动的最常见原因。

为了更清晰地展示不同操作系统下的常见路径,我整理了一个表格:

操作系统Chrome典型安装路径 (仅供参考)查找方法
WindowsC:\Program Files\Google\Chrome\Application\chrome.exe桌面图标右键 -> 属性 -> 目标
Windows (64位)C:\Program Files (x86)\Google\Chrome\Application\chrome.exe同上
macOS/Applications/Google Chrome.app/Contents/MacOS/Google Chrome访达 -> 应用程序 -> 右键Chrome -> 显示包内容
Linux/usr/bin/google-chrome 或 /opt/google/chrome/chrome终端执行 which google-chrome

配置完成后,点击“确定”保存。至此,最关键的准备工作就完成了。

2. 创建你的第一个Web自动化项目

环境配置妥当,让我们立刻开始创建第一个脚本,感受一下AirtestIDE的便捷。

2.1 新建项目与初始化驱动

在AirtestIDE中,点击 文件 -> 新建脚本,选择 .air Airtest项目。给项目起个名字,比如 first_web_test。系统会自动生成一个 .air 文件夹,里面包含一个同名的 .py 脚本文件。

现在,让我们打开浏览器。在左侧的 Selenium Window 中,点击那个地球图标(初始化 按钮)。如果你是第一次点击,IDE可能会弹出一个黄色提示框,询问是否插入初始化代码,选择 Yes。

你的脚本编辑器中会自动插入如下代码:

# -*- encoding=utf8 -*-
__author__ = "AirtestProject"

from airtest.core.api import *
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from airtest_selenium.proxy import WebChrome

# 创建WebChrome驱动实例
driver = WebChrome()
driver.implicitly_wait(20)

这段代码做了三件事:

  1. 导入了必要的库,包括标准的 selenium.webdriver 和Airtest封装的 airtest_selenium.proxy.WebChrome。
  2. 实例化了一个 driver 对象。请注意,这里使用的是 WebChrome(),而不是Selenium原生的 webdriver.Chrome()。WebChrome 是Airtest对Selenium的封装,它额外集成了图像识别等Airtest特性。
  3. 设置了隐式等待时间为20秒,这意味着在查找元素时,如果元素没有立即出现,driver会最多等待20秒再去抛出异常。

此时,你应该能看到一个全新的Chrome浏览器窗口被打开。如果没打开,请返回检查第一步的Chrome路径配置。

2.2 录制你的第一个操作:访问百度并搜索

AirtestIDE强大的录制功能可以极大降低脚本编写门槛。我们以“在百度搜索Airtest”为例。

  1. 打开网页:在Selenium Window中点击 start_web 按钮,在弹出的输入框里填入 https://www.baidu.com,然后点击确定。你会发现脚本中自动添加了一行:driver.get("https://www.baidu.com")。同时,浏览器会导航到百度首页。
  2. 录制点击与输入:
    • 点击Selenium Window中的红色圆形 录制 按钮,开始录制。
    • 在浏览器中,用鼠标点击百度首页的搜索框。
    • 在搜索框中输入 “Airtest”。
    • 按下键盘上的 Enter 键进行搜索。
  3. 停止录制:点击Selenium Window中的 停止 按钮。

神奇的事情发生了!IDE自动在你的脚本中生成了一系列代码,可能类似于下面这样:

# 上述初始化代码...
driver.get("https://www.baidu.com")

# 以下是录制生成的代码
driver.find_element_by_id("kw").click()
driver.find_element_by_id("kw").send_keys("Airtest")
driver.find_element_by_id("kw").send_keys(Keys.ENTER)

你可以直接点击编辑器上方的 运行 按钮(绿色的三角形),脚本便会自动回放你刚才录制的所有操作。这就是“所见即所得”的自动化脚本开发体验。

3. 超越录制:手动编写与增强脚本

录制功能虽好,但真实的测试场景往往更复杂。我们需要掌握手动编写和增强脚本的能力。Airtest-Selenium 几乎支持所有原生的Selenium WebDriver API,同时也提供了一些独有的增强功能。

3.1 核心元素定位与操作

Selenium提供了多种元素定位方式,在AirtestIDE中,你可以使用 元素检查器 来辅助定位。在Selenium Window中,点击放大镜图标(元素检查),然后将鼠标移动到浏览器页面的元素上,页面会高亮显示该元素,同时在IDE中会显示该元素的多种定位信息(如ID、XPath、CSS Selector等)。单击高亮元素,对应的定位代码(默认是XPath)就会自动插入到脚本编辑器中。

下表对比了常用的几种定位策略及其适用场景:

定位方式示例代码优点缺点适用场景
IDdriver.find_element_by_id(“kw”)速度快,唯一性好依赖开发赋予稳定ID首选,当元素有唯一ID时
Namedriver.find_element_by_name(“wd”)速度较快可能不唯一表单元素常用
XPathdriver.find_element_by_xpath(‘//input[@id=“kw”]’)非常灵活,可定位任何元素速度相对慢,易受页面结构变化影响当无ID/Name,或需定位复杂关系时
CSS Selectordriver.find_element_by_css_selector(‘#kw’)速度通常比XPath快,语法简洁对部分复杂定位支持不如XPath推荐,性能与灵活性平衡
Link Textdriver.find_element_by_link_text(“新闻”)专用于链接文本,直观只能用于<a>标签定位明确的文本链接

获取到元素对象后,你可以对其进行一系列操作:

  • 点击:.click()
  • 输入文本:.send_keys(“text”)
  • 清空输入框:.clear()
  • 获取文本:.text
  • 获取属性:.get_attribute(“href”)

3.2 Airtest-Selenium 的独有优势:图像识别

这是Airtest的看家本领。当页面元素无法通过常规属性定位(例如一个自定义绘制的图形按钮),或者你想进行更“视觉化”的断言时,图像识别就派上用场了。

在Selenium Window中,你会看到 airtest_touch 和 assert_template 两个按钮。它们的使用方法类似:

  1. 点击 airtest_touch 按钮。
  2. 鼠标会变成十字准星,在浏览器窗口上拖拽出一个矩形框,框住你想要点击的目标(比如百度首页的“百度一下”按钮)。
  3. 松开鼠标,IDE会自动截取该区域的图片,并生成一行代码:driver.airtest_touch(Template(r”tpl123456.png”, record_pos=(x, y), resolution=(width, height)))
  4. 运行脚本时,Airtest会在当前页面中寻找与这张截图匹配的区域并进行点击。

图像识别断言 assert_template 的用法同理,用于断言某个图片元素出现在页面上。

重要提示:图像识别受屏幕分辨率、缩放比例、页面动态内容影响较大。在实际项目中,建议将图像识别作为辅助或兜底方案,优先使用基于元素属性的定位方式,以保证脚本的稳定性和执行速度。

3.3 处理多窗口、iframe与等待

多窗口/标签页切换:Airtest-Selenium 封装了更易用的方法。

# 点击某个链接,在新标签页打开
driver.find_element_by_partial_link_text(“新窗口打开”).click()

# 切换到最新的标签页
driver.switch_to_new_tab()

# 操作新页面...
# ...

# 切换回之前的标签页
driver.switch_to_previous_tab()

# 关闭当前标签页并切回前一个
driver.close()
driver.switch_to_previous_tab()

处理iframe:如果元素位于iframe内部,必须先切换到对应的iframe框架。

# 通过ID或Name切换
driver.switch_to.frame(“iframe_id_or_name”)

# 通过索引切换(从0开始)
driver.switch_to.frame(0)

# 通过WebElement切换
iframe = driver.find_element_by_tag_name(“iframe”)
driver.switch_to.frame(iframe)

# 操作iframe内的元素...
# ...

# 切换回主文档
driver.switch_to.default_content()

智能等待:避免使用固定的 sleep,而是使用显式等待或隐式等待。

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 显式等待:等待某个元素可点击,最多等10秒
element = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.ID, “submit_btn”))
)
element.click()

# 隐式等待(已在初始化时设置):在查找任何元素时,如果未立即找到,会轮询等待一段时间
# driver.implicitly_wait(10)

4. 脚本调试、报告生成与进阶技巧

脚本写好了,如何验证它是否可靠?出了问题如何排查?测试结果如何呈现?这是自动化测试闭环的关键。

4.1 运行调试与日志查看

在AirtestIDE中运行脚本非常简单,点击工具栏的绿色运行按钮即可。运行过程中,你可以:

  • 实时观察:在右侧的设备窗口,你会看到浏览器在自动执行你的操作。
  • 查看日志:下方的“Log查看窗”会输出详细的执行日志,包括每一步的操作、成功或失败的信息。如果脚本出错,这里会打印出详细的错误栈信息,是调试的第一手资料。
  • 断点调试:虽然AirtestIDE对Python原生调试支持有限,但你可以在关键步骤后插入 sleep 暂停,或者使用 print 语句输出变量状态来辅助调试。

一个常见的调试技巧是,在可能出错的操作前后,使用 snapshot 截屏。

driver.get(“https://example.com”)
driver.snapshot(“首页截图”) # 保存一张名为“首页截图”的图片到日志目录

try:
    driver.find_element_by_id(“non_exist”).click()
except Exception as e:
    print(f“定位元素失败: {e}”)
    driver.snapshot(“失败时截图”) # 记录失败时的页面状态

4.2 生成与解读HTML测试报告

脚本运行结束后(无论成功失败),点击工具栏上的 查看报告 按钮(纸飞机图标),AirtestIDE会自动在浏览器中打开一份精美的HTML测试报告。

这份报告是Airtest的一大亮点,它清晰地展示了:

  • 测试步骤列表:按时间顺序列出每一个操作。
  • 操作截图:每个关键步骤(如点击、输入、断言)都附有当时的屏幕截图,一目了然。
  • 成功/失败状态:用绿色对勾和红色叉号明确标识。
  • 日志详情:点击每一步可以展开查看详细的日志信息。

报告不仅用于自己复盘,更是向团队展示测试结果、证明测试有效性的有力工具。如果测试失败,通过报告中的截图和日志,可以快速定位是页面元素变了、网络慢了,还是脚本逻辑有问题。

4.3 常见问题排查清单(避坑指南)

根据大量实践,我总结了一份新手高频问题清单,希望能帮你节省大量搜索时间:

  1. 浏览器启动失败,提示 cannot find Chrome binary

    • 原因:Chrome Path 配置错误或Chrome未安装。
    • 解决:严格按照1.2节的方法,在IDE设置中配置正确的 chrome.exe 路径。
  2. 浏览器启动后秒退,或提示 chromedriver 版本不匹配

    • 原因:AirtestIDE内置的 chromedriver 版本与你本地安装的Chrome浏览器版本不兼容。
    • 解决:去 ChromeDriver官网 下载与你的Chrome版本号匹配的 chromedriver.exe,将其放置到AirtestIDE安装目录下的 airtest\selenium\webdriver 文件夹中(覆盖原有文件)。查看Chrome版本:在浏览器地址栏输入 chrome://version/。
  3. 元素定位失败,报 NoSuchElementException

    • 原因:页面尚未加载完成,或元素定位符已失效。
    • 解决:
      • 增加等待:在操作前使用 WebDriverWait 进行显式等待。
      • 检查定位符:使用浏览器的开发者工具(F12)重新检查元素的属性(ID、Class等)是否变化。警惕动态生成的ID。
      • 尝试其他定位方式:如果XPath不稳定,尝试用CSS Selector或ID。
  4. 图像识别失败,报 Target not found on screen

    • 原因:页面内容发生变化、浏览器窗口大小/缩放比例改变、截图区域不具唯一性。
    • 解决:
      • 确保运行脚本时的浏览器窗口状态(大小、位置)与录制时基本一致。
      • 尝试提高截图区域的辨识度,避免截取大片纯色或重复纹理区域。
      • 适当调整 Template 的 threshold(匹配阈值,默认0.7)参数,降低匹配精度要求(但可能增加误匹配风险)。
  5. 脚本在IDE中运行正常,但用命令行 python xxx.py 运行失败

    • 原因:缺少必要的Python库,或环境变量问题。
    • 解决:在项目目录下,使用pip安装依赖:pip install airtest selenium airtest-selenium。确保你的命令行Python环境与IDE使用的Python环境一致(AirtestIDE自带Python环境)。

掌握了这些核心配置、脚本编写、调试和排错技巧后,你已经具备了使用AirtestIDE开展基础Web自动化测试的能力。真正的熟练来自于实践,建议你从公司内部一个简单的系统开始,尝试将一次重复的手工测试任务自动化,在实践中不断遇到和解决问题,你的技能树便会飞速成长。

更多推荐