
在ui自动化测试中,处理需要翻页才能完整查看的内容是一个常见场景。当页面提供明确的“下一页”按钮时,自动化相对直接。然而,某些复杂的ui设计可能不提供此类按钮,而是依赖于特定的键盘输入(例如按下enter键)来加载下一页内容。此外,判断何时到达内容末尾的逻辑也可能不是基于固定元素,而是基于页面上特定文本的出现或消失,或某个元素的有无。
本教程将聚焦于Karate UI自动化中解决这类挑战的方法。具体来说,我们将探讨如何:
Karate UI提供了一个强大的waitUntil功能,它能够重复执行一个JavaScript函数,直到该函数返回true。这使得waitUntil成为处理动态页面加载和条件循环的理想选择。结合内联JavaScript函数,我们可以在循环中实现复杂的逻辑,包括数据提取、条件判断和页面交互。
首先,我们需要一个机制来收集所有页面的数据。在Karate中,我们可以定义一个全局的JavaScript数组来存储这些数据。对于每一页,可以使用locateAll结合JavaScript的map函数来提取特定元素的内容。
* def allData = []
关键在于构建一个JavaScript函数,该函数将在waitUntil的循环中执行。这个函数需要完成以下任务:
以下是一个示例JavaScript函数,它结合了数据提取、条件判断和翻页逻辑:
* def allData = []
* def loopContent =
"""
function() {
// 1. 检查是否存在表示“更多数据”的元素,或特定消息编号元素
// 假设 '.messageNumber' 元素在最后一页会消失或不再显示“更多数据”的提示
if (!exists('.messageNumber')) {
// 如果 '.messageNumber' 不存在,则认为已到达最后一页
// 提取当前页面的数据
let list = locateAll('form div', x => {
let id = x.attribute('id');
return id ? id.startsWith('line1_R') : false
});
let data = list.map(x => x.text.trim());
allData.push(data); // 将最后一页的数据加入
return true; // 返回 true 终止 waitUntil 循环
}
// 2. 如果 '.messageNumber' 仍然存在,说明还有更多页面
// 提取当前页面的数据
let list = locateAll('form div', x => {
let id = x.attribute('id');
return id ? id.startsWith('line1_R') : false
});
let data = list.map(x => x.text.trim());
allData.push(data); // 将当前页数据加入
// 3. 模拟按下 Enter 键加载下一页
input('body', Key.ENTER);
// 4. 返回 false (或不返回任何值) 让 waitUntil 继续循环
return false;
}
"""代码解释:
定义好loopContent函数后,只需调用waitUntil即可启动循环:
* waitUntil(loopContent) * print allData
waitUntil(loopContent)会反复调用loopContent函数,直到loopContent返回true。一旦循环结束,allData数组中就包含了从所有页面收集到的数据。
在收集数据的过程中,尤其是在每次翻页都完整提取当前页所有内容时,可能会出现重复数据。Karate提供了一个方便的内置函数karate.distinct()来处理数组去重:
* def cleanedData = karate.distinct(allData) * print cleanedData
karate.distinct()会返回一个新数组,其中包含allData中所有唯一的元素。
优化提示: 如果性能是关键因素,并且页面内容非常庞大,你可能希望在loopContent函数内部实现更精细的逻辑,只push()新加载的或尚未收集的数据,而不是每次都收集所有可见数据然后去重。但这会增加JavaScript函数的复杂性,需要更精确地识别新旧数据边界。对于大多数场景,karate.distinct()已足够高效。
通过巧妙地结合Karate的waitUntil功能和自定义JavaScript函数,我们可以高效地处理复杂的UI自动化场景,例如在没有直接“下一页”按钮的情况下进行分页导航,并根据动态条件判断循环终止。这种方法不仅能够灵活地提取和汇总跨页数据,还能通过karate.distinct()等辅助函数进一步优化数据处理流程,从而构建出更加健壮和高效的自动化测试脚本。掌握这种模式,将大大提升你在处理复杂Web应用UI自动化时的能力。
以上就是Karate UI自动化中基于条件逻辑处理分页数据提取教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号