查作网

sahi使用有哪些实用技巧?

Sahi 是一款功能强大的 Web 自动化测试工具,尤其擅长处理复杂的 Web 应用测试场景,通过掌握其核心使用技巧,可以显著提升测试效率和覆盖率,以下从多个维度详细解析 Sahi 的实用技巧,帮助用户充分发挥工具潜力。

脚本录制与优化技巧

Sahi 提供了浏览器插件形式的录制功能,但直接录制的脚本往往存在冗余或低效问题,优化脚本时,首先应学会使用 _setRecording(true)_setRecording(false) 手动控制录制范围,避免录制无关操作,在登录流程录制时,可以只包含输入用户名、密码和点击登录按钮的步骤,而跳过页面加载等无关过程,对于重复性操作,应优先使用循环结构,测试表格数据展示时,可通过 _for(_in, $rows, "tbody tr") 遍历所有行,结合 _getText($cell) 验证数据正确性,避免为每行编写重复代码。

sahi 使用技巧-图1
(图片来源网络,侵删)

元素定位策略优化

Sahi 支持多种元素定位方式,包括 ID、name、文本、XPath 等,选择合适的定位方式是脚本稳定性的关键,优先使用 _link("文本")_button("值") 等语义化定位,避免依赖易变的 DOM 结构,对于动态生成的元素,可结合 (_near(_element("标签"), "文本") 定位邻近元素,若元素无唯一标识,可通过 _table("表格标题")/_cell(行, 列) 定位表格数据,需注意,XPath 定位虽灵活但性能较低,应尽量减少使用,尤其在频繁操作的步骤中。

数据驱动测试实现

Sahi 可通过 CSV 或 Excel 文件实现数据驱动测试,首先准备数据文件,如 test_data.csv 包含多组用户名和密码,在脚本中使用 _readCSV("test_data.csv") 读取数据,并通过 _for(_in, $data, $csvData) 遍历数据集。

$csvData = _readCSV("test_data.csv");
_for(_in, $row, $csvData) {
    _setValue(_textbox("username"), $row[0]);
    _setValue(_password("password"), $row[1]);
    _click(_button("登录"));
    _assertEqual(_getTitle(), "首页");
}

这种方式可轻松扩展测试用例,避免硬编码数据。

等待机制处理

异步加载是 Web 自动化的常见挑战,Sahi 提供了多种等待方式:_wait(5000) 固定等待(不推荐)、_waitForVisible(_element("目标"), 10000) 等待元素可见、_waitForAjax() 等待 AJAX 请求完成,推荐优先使用 _waitForVisible,避免脚本因元素未加载而失败,在点击按钮后等待弹窗出现:

sahi 使用技巧-图2
(图片来源网络,侵删)
_click(_button("提交"));
_waitForVisible(_div("提示信息"), 5000);
_assertTrue(_isVisible(_div("成功")));

跨浏览器与跨平台测试

Sahi 支持主流浏览器(Chrome、Firefox、Edge 等),通过修改 userdata/config.xml 中的 <browser> 标签切换浏览器。

<browser path="C:/Program Files/Google/Chrome/Application/chrome.exe" executable="chrome.exe" />

执行脚本时,可通过命令行参数指定浏览器:sahi.bat http://demo.test/sahn/aut/manual_test/ -browser chrome,对于跨平台测试,Sahi 的 Java API 可生成 JAR 包,在 Windows/Linux 环境下统一执行,确保测试一致性。

异常处理与日志管理

健壮的脚本需包含异常处理,使用 _try_catch 捕获运行时错误,并结合 _logError("错误信息") 记录日志。

_try({
    _click(_link("用户中心"));
    _assertEqual(_getText(_h1()), "个人中心");
}, {
    _logError("用户中心页面加载失败");
});

日志文件默认存于 logs/sahi_logs/,可通过 sahi.bat --logs 查看实时日志,便于快速定位问题。

sahi 使用技巧-图3
(图片来源网络,侵删)

集成与扩展技巧

Sahi 可与 TestNG、JUnit 等测试框架集成,生成结构化测试报告,在 TestNG 中调用 Sahi 脚本:

@Test
public void testLogin() {
    ScriptRunner runner = new ScriptRunner("D:/sahiscripts/login.sah", "http://demo.test", "chrome", 30000);
    runner.execute();
}

Sahi 支持自定义 Java 函数,通过 src/com/xhaus/sahi/js/ 目录下的 JS 文件扩展功能,如封装常用操作为 _customLogin() 函数,提升脚本复用性。

性能优化建议

为提高执行效率,需注意以下几点:1)避免频繁操作 DOM,如 _getText() 可缓存结果;2)合理使用 _inIFrame() 切换框架,减少嵌套层级;3)关闭浏览器图片加载(在 config.xml 中设置 <disableImages>true</disableImages>),对于大规模测试,可启用 Sahi 的分布式模式,在多台机器上并行执行脚本,缩短测试周期。

常见问题解决

  1. 元素定位失败:检查元素是否在 iframe 中,或使用浏览器开发者工具确认选择器是否正确。
  2. 脚本执行超时:调整 _waitFor 的超时时间,或优化页面加载逻辑。

相关问答FAQs

Q1: Sahi 如何处理动态生成的元素?
A: 对于动态元素,可结合 _waitForVisible 等待元素出现,并使用稳定的定位策略,若元素 ID 动态变化,可通过 _near(_element("父元素"), "文本") 定位邻近固定元素,或使用 (_contains(_div("类名"), "文本") 匹配包含特定文本的元素。

Q2: Sahi 脚本如何在 CI/CD 流程中自动化执行?
A: 可通过 Sahi 的命令行接口(如 sahi.bat start 启动服务,sahi.bat run ... 执行脚本)集成到 Jenkins、GitLab CI 等工具中,结合 TestNG 生成 XML 配置文件,配置 CI 任务定时触发脚本执行,并将测试报告发送至指定邮箱或存储库。

分享:
扫描分享到社交APP
上一篇
下一篇