XCUITest中如何正确获取动态生成的元素?
我在用XCUITest写iOS自动化测试时,遇到一个头疼的问题:页面上有些按钮是通过JavaScript动态插入的,XCUIElement经常找不到它们。明明在模拟器里能看到按钮,但测试一跑就报“element not found”。
我试过加sleep等待,也试过用waitForExistence(timeout:),但都不稳定。是不是我的查询方式有问题?比如下面这段前端代码生成的按钮:
const btn = document.createElement('button');
btn.id = 'submit-btn';
btn.textContent = '提交';
document.body.appendChild(btn);
在XCUITest里我用的是app.buttons["submit-btn"]去查,但有时候能点到,有时候直接超时失败,到底该怎么处理这种动态元素啊?
首先别用
app.buttons["submit-btn"]这种简单的查找方式了,容易出问题。试试这个方法:这个代码的核心是用
descendants(matching:)来递归查找整个视图层级,比直接通过类型查找要稳定得多。另外记得在测试开始前加个小小的延迟,比如半秒,给页面一点喘息的时间:
复制这个代码试试,应该能解决你的问题。如果还是偶尔失败,可能得再调高那个timeout时间。说实话这种动态元素就是得靠经验慢慢磨。