2017-10-02 1 views
-1

J'ai balises html comme ci-dessous:Trouver un tag p sous un div avec du sélénium?

<div class="inline-error-content"> 
    <p>Invalid number.</p> 
</div> 

Il est une étiquette de validation rendu lorsque les lettres sont tapées dans le champ numéro de téléphone à l'écran. J'écris un test de régression Selenium pour vérifier que cela fonctionne - cependant, je ne sais pas comment obtenir la balise p quand elle est rendue sans ID ou nom de classe. Je ne veux pas vraiment simplement trouver toutes les balises p rendues par XPath car il y en aurait plusieurs retournées.

Je tentais le code ci-dessous

Driver.FindElement(By.Name("telephoneNumber")).SendKeys("abc"); 
Thread.Sleep(2000); 
var result = Driver.FindElement(By.XPath("//div[contains(@class, 'inline-error-content')]")); 

Le .Text sur le résultat est une chaîne vide

+0

Quelle est votre validation? Essayez-vous de vous assurer que le HTML ci-dessus n'existe pas ou? Ce n'est pas clair à cause de votre question. – JeffC

Répondre

0

est la balise p "Numéro non valide." texte? Si oui, vous pouvez utiliser un XPath avant droite comme suit:

By.XPath("//div[contains(@class, 'inline-error-content')]/p[text()='Invalid number']) 

Vous pouvez même faire analyser tous les tags p et trouver juste le seul enregistrement considérant qu'il n'y a pas p noeuds avec le texte du numéro non valide.

By.XPath("//p[text()='Invalid number']) 

Espérons que cela aide.

1

Tout d'abord, si vous voulez vérifier le texte de <p>, puis choisissez avec votre XPath:

By.XPath("//div[contains(@class, 'inline-error-content')]/p") 

De même, dormir dans le test est généralement une mauvaise idée. Utilisez Wait and Expected Condition à la place:

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(2)); 
IWebElement myDynamicElement = wait.Until<IWebElement>(d => d.FindElement(By.XPath("//div[contains(@class, 'inline-error-content')]/p"))); 
+0

Lorsque je débogue cela, je vois le nom de la balise et survolez le résultat var. Je vois le nom de la balise comme "p" mais la chaîne de texte reste vide "". Je m'attendais à ce que ce soit "numéro invalide". C'est alors que je conduis mon Assert.AreEqual de –

+0

pourrait être 3 causes possibles: 1. que xpath correspond à plusieurs emplacements (donc voir si d'autres éléments ont 'contains (@class, 'inline-error-content')' condition 2. n'attend pas assez longtemps (donc définissez peut-être 'TimeSpan.FromSeconds (10)' pour éviter ce problème pour le moment) 3. tag lui-même ou l'un de ses parents n'est pas visible, auquel cas le sélénium ne sera pas visible Donc, vérifiez aussi: 'myDynamicElement.Displayed && myDynamicElement.Enabled' –

+0

cheers - jetterai un coup d'oeil à ces 3 options. quelle serait la meilleure solution si elle est cause 1 –