2015-11-03 1 views
1

Il y a beaucoup de planbox, qui ont la même classe et les mêmes ID, à l'intérieur il y a un certain nombre de <p> étiquettes et texte décoré.Comment vérifier s'il y a un texte barré sur un texte dans le pilote web de sélénium?

<div class="planbox"> 
    <p class="baseprice"> 
     <span> 
     <strike> $70 </strike> 
     </span> 
    </p> 
    <p> New discount price is etc. </p> 
</div> 
<div class="planbox"> 
    <p class="baseprice"> 
     <span> $70 </span> 
    </p> 
</div> 

Maintenant, mon cas de test est - si le prix de base est biffés, alors seulement <p> 'New discount price .. </p> montrera, sinon non.

Comment vérifier si un texte est barré ou non? Et même si nous obtenons ceci, comment vais-je vérifier que <p> New discount.. </p> ne devrait pas montrer si le texte n'est pas grisé.

Comme il n'y a pas de classe dans <p> tag sur lequel je peux vérifier si elle est affichée ou non. Une solution dans mon esprit était - ajouter une classe factice dans <span> tag et en utilisant findChildren('span.dummyCLass') il résultera tous les webelements ayant dummyClass.

Maintenant, je vais vérifier si les éléments Web ont une étiquette de frappe ou non, et c'est l'endroit où je me suis coincé. Initialement, je pensais à une solution Jquery, mais est-il possible de faire sans ajouter de nouvelle classe et jquery?

+0

Qu'avez-vous essayé et quel a été le résultat? Comme vous l'avez fait à l'école ... montrez votre travail s'il vous plaît. :) Cela fait partie du processus d'obtenir des réponses aux questions sur SO. Cela vous est utile parce que cela vous force à étudier votre propre problème et à y réfléchir. Il prouve également aux lecteurs que vous avez fait vos devoirs et fait une tentative raisonnable de répondre à votre propre question. Troisièmement, il aide les lecteurs à trouver et à diagnostiquer le problème résultant en une meilleure réponse pour vous et moins de temps perdu pour nous. – JeffC

+0

@JeffC J'ai mis à jour ma question. – ajayv

Répondre

1

Je n'ai pas utilisé beaucoup de sélénium. Mais vous pouvez porter ce code jquery au sélénium,

//if there is a strike element 
if($(".baseprice span strike").length > 0){ 
    //next() will select the sibling of the p tag with baseprice class 
    $("p.baseprice).next() != undefined){ 
    return true 
    }else{ 
    return false 
    } 
} 
2

Vous n'avez pas besoin d'ajouter une classe à un élément pour accomplir cette tâche. En général, vous ne voulez pas modifier le code HTML. Un autre problème est ... si vous pouvez trouver l'élément pour ajouter une classe, alors vous n'avez pas besoin d'ajouter la classe pour trouver l'élément. :)

La manière dont j'approche des tâches comme celles-ci est de trouver l'élément le plus à l'extérieur qui contient tous les éléments qui vous intéressent. Je me réfère à cela comme un «conteneur». Ce que vous voulez faire dans ce cas est de trouver les conteneurs et de les parcourir à la recherche du prix barré et du texte "Nouveau prix discount ...". Les conteneurs sont DIV s avec la classe planbox. Le prix barré est indiqué par l'étiquette STRIKE. Le texte "Nouveau prix réduit ..." se trouve dans un tag P. Avec cette info, nous pouvons écrire du code. C'est Java parce que je ne sais pas quelle langue vous voulez et je ne suis pas familier avec le framework Galen.

// gets the collection of containers using a CSS selector 
List<WebElement> containers = driver.findElements(By.cssSelector("div.planbox")); 
// loops through the containers 
for (WebElement container : containers) 
{ 
    // determine if the STRIKE tag exists 
    boolean strikeExists = !container.findElements(By.tagName("strike")).isEmpty(); 
    // determine if the "New discount price is..." text exists in the 2nd P tag 
    boolean discountPriceExists = container.findElements(By.tagName("p")).get(1).getText().trim().contains("New discount price is"); 
    // if both are true log a pass, otherwise log a fail 
    if (strikeExists && discountPriceExists) 
    { 
     // log a pass 
    } 
    else 
    { 
     // log a fail 
    } 
} 
+0

merci beaucoup. :) – ajayv

+0

Si cela répond à votre question, veuillez l'accepter comme réponse afin que la question reçoive la réponse. Merci! – JeffC

-1

vous pouvez utiliser Galen pour cela. Là, vous pouvez vérifier certains CSS properties.

+0

Bien que cela puisse théoriquement répondre à la question, [il serait préférable] (// meta.stackoverflow.com/q/8259) d'inclure les parties essentielles de la réponse ici, et de fournir le lien pour référence. – JeffC