排毒:iOS模拟器如何确认警报信息

Ant*_*ni4 11 ios ios-simulator react-native detox

我正在使用来自react-native的Alert.

如何通过警报消息按"退出"按钮进行排毒?

在此输入图像描述

我试过用 await element(by.text('Log out')).tap();

但我得到"多个元素匹配"的错误.据推测,它找到3个具有相同标签的元素.带有标签"Log out"的原始按钮用于触发警报消息,警报消息标题和我想排毒按下的警报消息按钮.

Error Trace: [
  {
    "Description" : "Multiple elements were matched: (
    "<UILabel:0x7fe7964db910; AX=Y; AX.label='Log out'; AX.frame={{41, 234}, {238, 20.5}}; AX.activationPoint={160, 244.25}; AX.traits='UIAccessibilityTraitStaticText'; AX.focused='N'; frame={{16, 20}, {238, 20.5}}; opaque; alpha=1; UIE=N; text='Log out'>",
    "<UILabel:0x7fe7964dda90; AX=Y; AX.label='Log out'; AX.frame={{198.5, 322.5}, {58, 20.5}}; AX.activationPoint={227.5, 332.75}; AX.traits='UIAccessibilityTraitStaticText'; AX.focused='N'; frame={{0, 12}, {58, 20.5}}; opaque; alpha=1; UIE=N; text='Log out'>",
    "<RCTText:0x7fe79652f300; AX=Y; AX.label='Log out'; AX.frame={{16, 338.5}, {288, 17}}; AX.activationPoint={160, 347}; AX.traits='UIAccessibilityTraitStaticText'; AX.focused='N'; frame={{0, 0}, {288, 17}}; alpha=1>"
). Please use selection matchers to narrow the selection down to single element.",
    "Error Domain" : "com.google.earlgrey.ElementInteractionErrorDomain",
    "Error Code" : "5",
    "File Name" : "GREYElementInteraction.m",
    "Function Name" : "-[GREYElementInteraction grey_errorForMultipleMatchingElements:withMatchedElementsIndexOutOfBounds:]",
    "Line" : "956"
  }
]
Run Code Online (Sandbox Code Playgroud)

我想有一种方法是使用.atIndex(),但这意味着我需要在每次更改某些内容时使用索引来确定正确的元素.

有没有更好的方法来解决这个问题?

谢谢.

Ant*_*ni4 18

经过一些修修补补后,我最终使用了这个:

await element(by.label('Log out').and(by.type('_UIAlertControllerActionView'))).tap();
Run Code Online (Sandbox Code Playgroud)

不确定这是否适用于每个iOS版本,但似乎适用于10.3和11.1

  • @arjun它似乎不适用于系统打开的警报框.我尝试使用此解决方案,将'注销'替换为'允许'(用于推送通知权限),但Detox仍然退出`错误:错误:无法找到UI元素. (3认同)
  • 它适用于系统打开的警报箱吗?比如要求用户许可. (2认同)