2009-12-09 5 views
1

Vu le code html suivant:Trouver un élément HTML ID basé sur un texte affiché

<div id="f52_lblQuestionWording" title="" style="width:auto;height:auto; display: inline; overflow: hidden;" >Home telephone</div> 

Je veux obtenir automatiquement l'ID du conteneur élément div en utilisant la chaîne « téléphone maison », personne ne sait comment je peut le faire via une expression régulière?

La chaîne pour trouver l'ID n'est pas toujours la même et le code HTML est généré dynamiquement, il peut donc être légèrement différent de temps en temps. Je travaille sur l'automatisation des tests d'interface utilisateur sur un projet d'entreprise utilisant Selenium.

Merci.

+0

Vous devez saisir l'élément de texte DOM qui contient la chaîne spécifiée, puis récupérer son parent. Ce sera probablement très lent. Quel est exactement le but de cela? Existe-t-il un meilleur moyen de résoudre le plus gros problème? –

Répondre

1

XPath est la meilleure façon de récupérer les valeurs à partir de documents XML et HTML (à condition qu'elles soient bien formés).

L'expression que vous voulez est la suivante:

//div[text() = 'Home telephone']/@id 

qui se lit, « Trouvez tous les divs dont la valeur texte est égale à « téléphone maison », et retourner l'attribut id pour tout ce qui correspond. » En fonction de votre langue, il existe généralement plusieurs interpréteurs XPath intégrés ou tiers (et gratuits) disponibles sur le marché.

C'est une mauvaise idée d'analyser HTML en utilisant des expressions régulières car HTML n'est pas un langage régulier. Les expressions régulières ne peuvent pas gérer les cas de bordure HTML les plus simples, car les expressions régulières ne peuvent pas traiter correctement l'imbrication. HTML est une structure intrinsèquement imbriquée.

+0

Merci pour la réponse. J'utilise un script java pour écrire une extension à utiliser dans Selenium et cela semble être la meilleure façon de faire ce que je cherche. – user228178

0

Je ne suis pas sûr de ce que vous voulez dire en utilisant la la chaîne « téléphone maison » mais voici quelques façons de le faire:

/id=(.*?)\s+.*(?=Home telephone)/ 

où (=?) Construction est positif si vous préanalyse le langage de programmation le supporte.

Une autre façon est simplement grep pour téléphone à la maison, puis saisissez l'identifiant à l'aide awk ou sed

0

En C#, vous devez créer un regex qui ressemblait à ceci:

string elementText = "Home\\stelephone"; // you can change this as needed 
Regex regex = new Regex(
    "id=\"(.*?)\"\\s+.*(?="+ elementText +")", 
RegexOptions.IgnoreCase 
| RegexOptions.CultureInvariant 
| RegexOptions.IgnorePatternWhitespace 
| RegexOptions.Compiled 
); 

// Capture all Matches in the InputText 
MatchCollection ms = regex.Matches(InputText); 

InputText serait votre fichier html ouvert pour la lecture.

Questions connexes