2010-06-02 8 views
2

J'ai quelques boutons avec un attribut onclick et d'autres non. Je veux vérifier si l'élément spécifié a l'attribut onclick. Comment puis-je faire ceci?Selenium RC: Comment vérifier si un élément a un attribut donné?

getAttribute() renvoie la valeur d'attribut lorsqu'elle en a une. Quand ce n'est pas le cas, il lance une RuntimeException et arrête le test (même quand je l'enveloppe dans un bloc try/catch).

$onclickValue = $this->getAttribute("[email protected]"); //works when the attribute exists 

Répondre

4

En utilisant getEval(), vous pouvez exécuter la fonction javascript hasAttribute(). L'utilisation findElement(), vous permettra de travailler avec n'importe quel type de modèle de localisateur.

$hasAttribute = $this->getEval('this.browserbot.findElement("' . $locator . '").hasAttribute("onclick")'); 
if ($hasAttribute === 'true') { 
    //attribute exists 
} 

Notez que getEval() retourne une chaîne, pas une valeur booléenne.

2

Vous pouvez d'abord vérifier si l'élément est présent en utilisant XPath //location/of/element[@onclick]

0

Veuillez m'excuser si cela ne s'applique pas à Selenium RC. Dans Selenium IDE, on peut utiliser le

assertElementNotPresent

commande

, qui (malgré le nom) peut déterminer si un attribut donné est présent. C'est seulement le paramètre est un localisateur d'élément qui peut être de la forme

[email protected].

Bien sûr, cela ne sera approprié que si vous connaissez les éléments qui doivent avoir l'attribut en question. Si ce n'est pas le cas, je suppose que vous devrez parcourir les ensembles d'éléments en utilisant des expressions XPath.

+0

Merci pour ce commentaire. J'ai cherché cet exemple pour Selenium IDE, et non RC, donc ça m'a aidé. –

0

La raison pour laquelle une RuntimeException est levée est due au fonctionnement du pilote de sélénium de PHPUnit.

Il considère certaines situations comme des erreurs qui effectuent un arrêt() de l'exécution du test. En particulier, le code qui arrête le test dans cette situation est la suivante:

protected function getString($command, array $arguments) 
{ 
    try { 
     $result = $this->doCommand($command, $arguments); 
    } 

    catch (RuntimeException $e) { 
     $this->stop(); 

     throw $e; 
    } 

    return (strlen($result) > 3) ? substr($result, 3) : ''; 
} 

Je l'ai déjà ouvert une question au sujet de cette façon d'erreurs de manipulation dans le pilote à https://github.com/sebastianbergmann/phpunit/issues/276

BTW, en supprimant les appels à arrêter() dans doCommand() et getString() de /usr/share/php/PHPUnit/Extensions/SeleniumTestCase/Driver.php rendra votre code capable d'attraper l'exception et de la gérer comme vous préférez.

Questions connexes