排毒文本输入不写文本

时间:2019-02-26 00:09:13

标签: javascript ios react-native jestjs detox

我在我的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"
      }
    ]

1 个答案:

答案 0 :(得分:0)

您当前正在两次测试之间重新加载设备。

beforeEach(async () => {
  await device.reloadReactNative();
});

我不认为这是您想要做的,因为它会重置所有内容,这意味着您必须等待所有内容重新加载并在屏幕上移动,并且您将面临与上一个{{3} }(注意,您对waitFor的使用是不正确的,请参阅我以前的帖子中的答案,或者重新阅读post

您可以在documentation中阅读有关.typeText的更多信息。

使用.typeText时常见的错误是没有断开硬件键盘的连接

  

注:确保已断开硬件键盘的连接。否则,尝试键入文本时排毒可能会失败。

     

要确保已断开硬件键盘的连接,请从Xcode打开模拟器,并确保未选中“硬件->键盘->连接硬件键盘”(或按⇧⌘K)。

使用.typeText时,我总是要做的一件事就是确保元素存在

因此,在使用.typeText以确保其可见之前,我将添加以下内容。

await expect(element(by.id('name'))).toBeVisible();