web-dev-qa-db-fra.com

Comment vérifier qu'un attribut est présent dans un élément à l'aide de Selenium WebDriver?

J'ai de nombreux boutons radio sur mon écran. Lorsqu'un bouton radio est sélectionné, il a un attribut coché. Lorsque le bouton radio n'est pas sélectionné, l'attribut coché n'est pas présent. Je voudrais créer une méthode qui passerait si l'élément n'était pas présent.

J'utilise le pilote Web Selenium et Java. Je sais que je peux récupérer des attributs en utilisant getSingleElement(XXX).getAttribute(XXX). Je ne suis simplement pas sûr de savoir comment vérifier qu'un attribut n'existe pas, et pour que le test passe quand il n'existe pas (échoue s'il existe).

Lorsque le bouton radio est coché

<input id="ctl00_cphMainContent_ctl00_iq1_response_0" type="radio" name="ctl00$cphMainContent$ctl00$iq1$response" value="1" checked="checked"> 

Lorsque le bouton radio n'est pas coché

<input id="ctl00_cphMainContent_ctl00_iq1_response_0" type="radio" name="ctl00$cphMainContent$ctl00$iq1$response" value="1">

Je veux que le test réussisse lorsque l'attribut vérifié n'est pas présent

15
TestRaptor

Vous pouvez créer une méthode pour la gérer correctement. Notez que ce qui suit est en style mixte C #/Java, vous devez modifier un peu pour compiler.

private boolean isAttribtuePresent(WebElement element, String attribute) {
    Boolean result = false;
    try {
        String value = element.getAttribute(attribute);
        if (value != null){
            result = true;
        }
    } catch (Exception e) {}

    return result;
}

Comment l'utiliser:

WebElement input = driver.findElement(By.cssSelector("input[name*='response']"));
Boolean checked = isAttribtuePresent(input, "checked");
// do your assertion here
21
Yi Zeng

Malheureusement, la réponse acceptée n'est pas valable dans le cas signalé. Pour une raison quelconque, les attributs non existants Cr et FF renvoient une chaîne vide plutôt que null. Problème lié: https://github.com/SeleniumHQ/Selenium/issues/2525

5
mehmetg

Regardez ici :

getAttribute (nom Java.lang.String)

Renvoie: La valeur actuelle de l'attribut ou null si la valeur n'est pas définie.

Utilisez le cadre de test que vous utilisez pour affirmer que la valeur est nulle

Assert.IsNull (getSingleElement (XXX) .getAttribute ("vérifié"));

4

Pour affirmer que le bouton radio est sélectionné

Assert.assertTrue(element.isSelected());

Pour affirmer que le bouton radio n'est pas sélectionné

Assert.assertFalse(element.isSelected());

Pour affirmer qu'un attribut est présent dans l'élément

Assert.assertEquals(element.getAttribute(attributeName), expectedAttributeValue);
2
pavanraju

Les cases à cocher peuvent parfois être délicates, car l'attribut vérifié peut ne pas être suivi d'une valeur d'attribut.

Si vous êtes uniquement concerné par la présence de l'attribut, une simple vérification ressemblerait à ceci:

 boolean hasAttr_css = driver.findElementsByCssSelector("#input_id[checked]").isEmpty();
1
PaoloV
try { 
if (webdriver.findElement(By.identificationMethod(value)).getAttribute(value) != null) {
       passed = false;
    }
} catch (Exception e) {
    passed = true;
}

Était le type de solution que j'ai utilisé lorsque j'ai eu besoin de vérifier la présence d'éléments, mais il faut noter que les erreurs NullPointer n'ont pas été détectées par l'exception NoSuchElement.

0
user3864935