我在我的react-native项目上使用Detox,并且想在登录屏幕上输入名称,但是Detox无法识别textInput。 这是我的文本代码
describe('SCA', () => {
beforeEach(async () => {
await device.reloadReactNative();
});
it('should have splash screen', async () => {
await expect(element(by.id('splash'))).toBeVisible();
});
it('should show login screen', async () => {
await waitFor(element(by.id('login'))).toBeVisible();
});
it('test login screen name input', async () => {
await element(by.id('name')).typeText('Liam')
});
});
textInput代码:
<TextInput
testID="name"
style={styles.input}
onChangeText={value => this.setState({ name: value }) }
placeholder={'Name ... '}
placeholderTextColor='white'
value={name} />
这是我得到的错误:
● SCA › test login screen name input
Failed: [Error: Error: Cannot find UI element.
Exception with Action: {
"Action Name": "Type 'Liam'",
"Element Matcher": "((!(kindOfClass('RCTScrollView')) && (respondsToSelector(accessibilityIdentifier) && accessibilityID('name'))) || (((kindOfClass('UIView') || respondsToSelector(accessibilityContainer)) && parentThatMatches(kindOfClass('RCTScrollView'))) && ((kindOfClass('UIView') || respondsToSelector(accessibilityContainer)) && parentThatMatches((respondsToSelector(accessibilityIdentifier) && accessibilityID('name'))))))",
"Recovery Suggestion": "Check if the element exists in the UI hierarchy printed below. If it exists, adjust the matcher so that it accurately matches element."
}
Error Trace: [
{
"Description": "Interaction cannot continue because the desired element was not found.",
"Error Domain": "com.google.earlgrey.ElementInteractionErrorDomain",
"Error Code": "0",
"File Name": "GREYElementInteraction.m",
"Function Name": "-[GREYElementInteraction matchedElementsWithTimeout:error:]",
"Line": "124"
}
]
答案 0 :(得分:0)
您当前正在两次测试之间重新加载设备。
beforeEach(async () => {
await device.reloadReactNative();
});
我不认为这是您想要做的,因为它会重置所有内容,这意味着您必须等待所有内容重新加载并在屏幕上移动,并且您将面临与上一个{{3} }(注意,您对waitFor
的使用是不正确的,请参阅我以前的帖子中的答案,或者重新阅读post)
您可以在documentation中阅读有关.typeText
的更多信息。
使用.typeText
时常见的错误是没有断开硬件键盘的连接
注:确保已断开硬件键盘的连接。否则,尝试键入文本时排毒可能会失败。
要确保已断开硬件键盘的连接,请从Xcode打开模拟器,并确保未选中“硬件->键盘->连接硬件键盘”(或按⇧⌘K)。
使用.typeText
时,我总是要做的一件事就是确保元素存在
因此,在使用.typeText
以确保其可见之前,我将添加以下内容。
await expect(element(by.id('name'))).toBeVisible();