我正在尝试使用颤振驱动程序进行集成测试。我正在使用 await driver.enterText(find.byType('OTPTextField')) 使用颤振驱动程序输入 otp。但它卡在那个屏幕上并且什么都不做,并且在终止错误后测试失败。OTPTextField 小部件的 UI 类型与普通文本字段不同。我不确定 enterText 函数是否可以在此工作。如果没有,有哪些替代方案?
这是我的OTPTextField小部件代码:
OTPTextField(
key: const Key('otpvalue'),
length: 6,
textFieldAlignment: MainAxisAlignment.spaceAround,
fieldWidth: 30,
fieldStyle: FieldStyle.underline,
width: MediaQuery.of(context).size.width / 2,
style: TextStyle(
fontSize: 17,
color: Colors.black,
fontWeight: FontWeight.bold),
onCompleted: (pin) async {
print("Completed: " + pin);
print(_user.status);
if (_user.status == Status.VerifyingOTP ||
_user.status == Status.VerifiedOTP) {
Navigator.of(context).push(
MaterialPageRoute(builder: (_) => LoaderScreen()));
return;
}
if (widget.isSignup) {
if (await _user.signUpWithPhoneNumber(
pin.toString(),
context,
email: widget.emailId,
firstName: widget.firstName,
lastName: widget.lastName,
)) {
Navigator.of(context).pushReplacement(
MaterialPageRoute(
builder: (context) => OtpVerified()));
} else {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => LoaderScreen()));
}
} else {
if (await _user.signInWithPhoneNumber(
pin.toString(), context, _user.language, _user.country)) {
Navigator.of(context).pushReplacement(
MaterialPageRoute(
builder: (context) => OtpVerified()));
} else {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => LoaderScreen()));
}
}
},
),
这是我为这个小部件尝试的集成测试代码。
test('enter otp', () async {
SerializableFinder enterotp = find.byValueKey('otpvalue');
await driver.tap(enterotp);
await driver.enterText('123456');
expect(await driver.getText(enterotp), "123456");
});