我想测试一个具有列表和过滤功能的视图:
- 我想检查第一行的文本并保存它
- 使用该文本进行筛选
- 再次检查是否呈现了相同的元素
问题是,当我使用 element(by.id('some-id'))
匹配和元素时,我如何从该元素中检索信息(如果可能的话(,例如它包含的文本?
我创建了detox-getprops npm包,其中包含Maxime Helen提到的hack。它允许检索元素的文本和一些其他(取决于平台的(属性。
const { getText } = require('detox-getprops');
const text = await getText(element(by.id('heading')));
expect(text).toEqual('Step One');
我希望 Detox #445 能尽快解决,之后可以弃用此软件包。
更新:您现在可以使用 getAttributes 方法在 iOS 上获取文本。Android 仍然需要 detox-getprops 库(使用 Detox #2083 进行跟踪(。
此评论中阐述的黑客/有趣的解决方法:
const readVisibleText = async (testID) => {
try {
await expect(element(by.id(testID))).toHaveText('_unfoundable_text');
throw 'We never should get here unless target element has unfoundable text';
} catch (error) {
if (device.getPlatform() === 'ios') {
const start = `accessibilityLabel was "`;
const end = '" on ';
const errorMessage = error.message.toString();
const [, restMessage] = errorMessage.split(start);
const [label] = restMessage.split(end);
return label;
} else {
// Android to be tested
const start = 'Got:';
const end = '}"';
const errorMessage = error.message.toString();
const [, restMessage] = errorMessage.split(start);
const [label] = restMessage.split(end);
const value = label.split(',');
var combineText = value.find(i => i.includes('text=')).trim();
const [, elementText] = combineText.split('=');
return elementText;
}
}
};
目前不支持此功能,此问题正在跟踪进度。