2017-07-13 1 views
0

J'ai essayé plusieurs localisateurs et je n'arrive pas à trouver une solution simple pour localiser le numéro (qui est dynamique et changer chaque chargement de page) à l'intérieur de cet intervalle dans C# Selenium. J'essaie juste de localiser la plage elle-même pour commencer.Comment le sélénium en C# peut-il localiser cette travée en fonction de sa valeur?

<span inventory="Livecount">129</span> 

Je reçois l'exception NoSuchElement, c'est-à-dire impossible de localiser l'élément.

Dernière chose liée au contexte: ce span et son numéro vivent à l'intérieur d'un widget, que j'ai pu localiser très bien. Ce widget n'a pas de classe ou d'identifiant unique, mais un nom de tag personnalisé, donc je ne peux le localiser que de façon fiable en utilisant le FindElement (By.TagName ("inventorySearch")), qui fonctionne. S'il y avait un moyen que je pourrais utiliser un sélecteur CSS pour commencer avec cet élément de widget (le parent) - et ensuite enchaîner à la portée à l'intérieur (il n'y a qu'un seul span dans chaque instance, donc il serait facile de localiser), le résoudrait. Mon problème est, je ne sais pas comment indiquer la variable dans un sélecteur CSS Seleniums (c'est-à-dire que les classes et les ID ont leurs symboles #) - Y a-t-il un équivalent de variable dans C# Selenium?

Répondre

1

Répondre à la question dans le titre, il est possible de localiser un <span> avec le texte '129 via XPath:

//span[text()='129'] 

Cependant, je soupçonne que ce nombre va changer, de sorte que vous pouvez également envisager de localiser le <span> où son attribut inventory est égal à 'Livecount':

Sélecteur CSS:

span[inventory='Livecount'] 

XPath:

//span[@inventory='Livecount'] 

Utilisation:

driver.FindElement(By.CssSelector("span[inventory='Livecount']")); 
driver.FindElement(By.XPath("//span[@inventory='Livecount']")); 

Paraphrasant votre dernière question, vous avez demandé s'il est possible d'utiliser un sélecteur CSS avec une nom de tag personnalisé. Ceci est également possible.

avec le code HTML suivant:

<inventorySearch> 
    <span inventory="Livecount">129</span> 
</inventorySearch> 

Pour sélectionner le <span> dans l'élément <inventorySearch>, utilisez le sélecteur CSS suivant:

inventorySearch > span 
+0

Merci @BUDI - Je suis allé avec votre dernier exemple et cela a fonctionné (il ne m'a jamais été dit que les noms de balises personnalisées seraient représentés dans le sélecteur CSS uniquement comme leur nom, aucun symbole, etc Si simple que je n'ai pas même le considérer!) Très apprécié, Yan. – user5071447

0

Ceci est également possible en utilisant le CSS

JQuery a a: contient un pseudo-sélecteur

c.-à-d. Span: contient ('129')

Vous devez utiliser le module de support Selenium NuGet pour obtenir cette fonctionnalité.

Install-Package Selenium.WebDriver.Extensions

Cela donne accès au Sizzle JQuery Sélecteur de moteur qui fournit le support de sélecteur de pseudo.