Benutzerdefinierte Regeln

This page is not available in the language you requested. You have been redirected to the English version of the page.
Link to this page copied to clipboard
Not for use with personal data

Mit der Funktion „Benutzerdefinierte Regeln“ können Sie neue Regeln erstellen, um diese zu testen und wichtige Verhaltensweisen innerhalb bestehender Regeln zu ändern.

Erstellen wir eine benutzerdefinierte Regel, die das Name-Attribut einer Ansicht überprüft. Die Ergebniskriterien lauten wie folgt:

  • Nicht zutreffend: Der Name ist null
  • Fehler: Der Name ist nicht null, sondern leer
  • Erfolg: Der Name ist nicht null und hat eine gewisse Länge

Erstellen der Regel

  1. Richten Sie ein neues Klassenobjekt ein, das von AxeRule erbt. Innerhalb des Initialisierers können Sie die Regelkonfiguration so einrichten, dass Folgendes angegeben wird:

    • Nach welchem Standard testen Sie
    • Die Auswirkungen
    • Eine Zusammenfassung der Regel
    class CustomRule: AxeRule {
    
        public init() {
            let ruleConfiguration = RuleConf(standard: AxeStandard.BEST_PRACTICE,
                                            impact: AxeImpact.MODERATE,
                                            summary: "Asserts that when name is present it is not empty.")
            super.init(ruleConf: ruleConfiguration)
        }
    }
  2. Als Nächstes müssen Sie die zu testenden Eigenschaften der Ansicht erfassen. Für unser Beispiel müssen wir auf die name Eigenschaft zugreifen.

   override func collectProps(for node: AxeView) -> AxeProps {
        let axeProps = AxeProps()
        axeProps.add([
            .name: node.name
        ])

        return axeProps
   }
  1. Zuletzt geben wir in der runRule Funktion an, was wir testen, um festzustellen, ob die Regel erfolgreich war, fehlgeschlagen ist oder als nicht anwendbar betrachtet wird.
    override func runRule(_ props: AxeProps) throws -> AxeStatus {
        guard let name = props.get(.name, withType: String.self) else { return .INAPPLICABLE }

        if !name.isEmpty {
            return AxeStatus.PASS
        } else {
            return AxeStatus.FAIL
        }
    }

Zu axe DevTools hinzufügen

Nachdem Sie die Logik für Ihre benutzerdefinierte Regel geschrieben haben, fügen Sie sie der Liste der Regeln hinzu, die axe DevTools kennt, indem Sie die Konfiguration anpassen. Sie sollten Konfigurationen festlegen, bevor Tests ausgeführt werden und nach der Authentifizierung.

axe?.configuration.customRules.insert(CustomRule())

Vollständiges Beispiel

class CustomRule: AxeRule {

    public init() {
        let ruleConfiguration = RuleConf(standard: AxeStandard.BEST_PRACTICE,
                                         impact: AxeImpact.MODERATE,
                                         summary: "Asserts that when name is present it is not empty.")
        super.init(ruleConf: ruleConfiguration)
    }

    override func collectProps(for node: AxeView) -> AxeProps {
        let axeProps = AxeProps()
        axeProps.add([
            .name: node.name
        ])

        return axeProps
    }

    override func runRule(_ props: AxeProps) throws -> AxeStatus {
        guard let name = props.get(.name, withType: String.self) else { return .INAPPLICABLE }

        if !name.isEmpty {
            return AxeStatus.PASS
        } else {
            return AxeStatus.FAIL
        }
    }
}