2

我正在尝试使用 detox 在我的 react-native 应用程序中测试表单。

表单中的输入之一具有multiline={true}.

我正在尝试运行以下测试:

const inputElement = element(by.id('input_multiline'));
await expect(inputElement).toBeVisible();
await inputElement.typeText('line1\n');
await inputElement.typeText('line2\n');
await inputElement.typeText('line3\n');

const submitElement = element(by.id('submit'));
await submitElement.toBeVisible();
await submitElement.tap();

该测试未能通过 75% 的可见性标准,因为键盘隐藏了提交按钮。

通常对于 TextInput ,multiline={false}您只需附加\n到输入字符串即可自动移动到下一个阶段,但对于多行输入\n,只需添加一个新行。

我该怎么做才能通过这个排毒测试?

4

1 回答 1

3

首先,我们需要能够关闭 TextInput 的键盘multiline={true}

为此,我们将使用 react-native 中的 Keyboard 模块。

import {Keyboard} from 'react-native'

现在用 TouchableWithoutFeedback 包装您的表单并在按下时调用 Keyboard.dismiss()。

<TouchableWithoutFeedback onPress={Keyboard.dismiss}>
  { /* your form goes here */ }
</TouchableWithoutFeedback>

现在修改您的排毒测试以关闭键盘。

const inputElement = element(by.id('input'));
await expect(inputElement).toBeVisible();
await inputElement.typeText('line1\n');
await inputElement.typeText('line2\n');
await inputElement.typeText('line3\n');
// click somewhere outside the input
await inputElement.tapAtPoint({x: 0, y: 1});

const submitElement = element(by.id('submit'));
await submitElement.toBeVisible();
await submitElement.tap();

排毒运行测试

于 2017-11-29T14:27:59.563 回答