10

我想测试一个具有列表和过滤功能的视图:

  1. 我想检查第一行的文本并保存
  2. 使用该文本过滤
  3. 再次检查是否呈现了相同的元素

问题是,当我使用 匹配和元素时,我element(by.id('some-id'))如何从该元素(如果可能的话)中检索信息,就像它包含的文本一样?

4

3 回答 3

6

我创建了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进行跟踪)。

于 2019-11-02T20:58:49.297 回答
4

从此评论中详细阐述了哈奇/有趣的解决方法:

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;
    }
  }
};
于 2019-07-24T21:08:51.383 回答
0

目前不支持此功能,正在跟踪此问题中的进度。

于 2018-10-09T16:36:56.250 回答