Я сейчас пытаюсь автоматизировать мой снимок приложения с помощью fastlane. В классе UITest я пытаюсь получить доступ к собственному компоненту TouchableOpacity React, который находится в пользовательском компоненте, а затем, когда я пытаюсь получить к нему доступ с использованием действия tap (), я получаю эту ошибку:
Failed to get matching snapshot: Multiple matching elements found for <XCUIElementQuery: 0x600000a71630>.
MyApp_UITests.swift:49
Executed 1 test, with 1 failure (0 unexpected) in 46.721 (46.729) seconds
Я не понимаю, почему причина в компоненте, есть только одна декларация. Может у кого-нибудь есть решение?
Есть класс Header Custom:
export class KoHeader extends React.Component {
constructor(props) {
super(props);
}
handleBackPress = () => {
this.props.navigation.goBack(null, { goBackHandle: true });
return true;
};
render() {
return (
<Header style={styles.header}>
<Left>
<TouchableOpacity
transparent
testID={this.props.testID}
accessibilityLabel={this.props.accessibilityLabel}
onPress={() => this.handleBackPress()}
>
<Icon
name="chevron-left"
style={{ color: "white", fontSize: 35, marginTop: -5 }}
/>
<Text style={{ fontSize: 11, color: "white", marginTop: -10 }}>
{I18n.t("hdReWo")}
</Text>
</TouchableOpacity>
</Left>
<Body>
<View>
<Button
transparent
onPress={() => this.props.navigation.navigate("Accueil")}
>
<Image
style={{
resizeMode: "contain",
width: 60,
height: 28,
alignSelf: "center"
}}
source={require("../../assets/logo_sidebar.png")}
/>
</Button>
</View>
</Body>
<Right>
<Button
transparent
onPress={() => this.props.navigation.navigate("Settings")}
>
<Icon name="settings" style={{ color: "white", fontSize: 23 }} />
</Button>
</Right>
</Header>
);
Вызов в компоненте:
<KoHeader
{...this.props}
testID={"Retour"}
accessibilityLabel={"Retour"}
/>
И, наконец, как Я пытаюсь использовать его в классе UITesting:
class MyApp_UITests: XCTestCase {
func testMyAppScreenShot() {
let app = XCUIApplication()
setupSnapshot(app)
app.launch()
sleep(10)
let emailField = app.textFields["Adresse e-mail"]
emailField.tap()
emailField.clearText()
emailField.typeText("XXX")
let passwordField = app.secureTextFields["Mot de passe"]
passwordField.tap()
passwordField.typeText("XXX")
app.otherElements["loginButtonScreen"].tap()
sleep(5)
snapshot("00HomeScreen")
app.otherElements["orderButtonScreen"].tap()
sleep(10)
snapshot("01OrderScreen")
app.otherElements["Retour"].tap()
sleep(4)
snapshot("02Test")
}
}
Может быть, есть другой способ достичь этого?
Спасибо.