使用Detox进行React Native端到端测试:获取匹配元素的宽高等属性
Detox获取元素属性的实现方案
Detox 从 v20.0.0 版本开始官方提供了属性获取能力,低版本也可以通过原生调用的方式实现需求,具体实现如下:
方案1:使用官方getAttributes API(推荐)
该方法适配了双平台属性读取逻辑,不需要单独处理平台差异(仅属性结构需按平台调整):
- 基础用法示例(适配你的展开高度验证场景):
// 获取展开前的元素高度 const beforeAttrs = await element(by.id("SOME_ID")).getAttributes(); const beforeHeight = device.getPlatform() === 'ios' ? beforeAttrs.frame.height : beforeAttrs.height; // 执行展开操作 await element(by.id("EXPAND_BUTTON_ID")).tap(); // 获取展开后的元素高度 const afterAttrs = await element(by.id("SOME_ID")).getAttributes(); const afterHeight = device.getPlatform() === 'ios' ? afterAttrs.frame.height : afterAttrs.height; // 验证高度符合预期 expect(afterHeight).toBeGreaterThan(beforeHeight);
- 安卓平台返回的属性和
toBeVisible报错信息里打印的属性完全一致,可直接读取width、visibility、text等你需要的所有字段。
方案2:低版本Detox兼容方案
如果你使用的Detox版本低于v20.0.0,可通过invoke直接调用原生视图的属性方法实现读取:
- 安卓读取高度示例:
const height = await element(by.id("SOME_ID")).invoke('getHeight');
- iOS读取高度示例:
const height = await element(by.id("SOME_ID")).invoke('frame').invoke('size').height;
该方案需要你了解对应平台原生视图的API命名,跨平台场景需要单独写适配逻辑。
内容的提问来源于stack exchange,提问作者fullStackChris
相关产品推荐
相关产品推荐

