0
votes

Dans un document HTML, recherchez un "texte" apparaissant après un autre "texte" à l'aide de XPath en Java & selenium

Le code HTML est comme suit -


xxx pré>

pour localiser le "tableau" présent à l'intérieur "Div ID =" Demo4a "', mon besoin est - P>

Étape 1: Trouvez d'abord le texte "ITC éligible" Étape 2: Localisez ensuite le texte "(A) ITC disponible" en utilisant le fait qu'il apparaît après le texte "ITC éligible" Étape 3: Localisez ensuite le premier "tableau" immédiatement après le texte "(a) ITC disponible" p>

pour localiser le "tableau" présent à l'intérieur "Div ID =" Demo4b "', mon besoin est -


Étape 1: Premier localiser le texte "CTI éligible" Étape 2: Localisez ensuite le texte "(B) ITC à l'envers" Utilisation du fait qu'il apparaît après le texte "ITC éligible", qui est suivi du texte "(A) ITC disponible" Étape 3: Localisez ensuite la première "table" immédiatement après le texte "(B) ITC inversé" p>

Qu'est-ce que j'ai essayé jusqu'à présent à l'aide des "suivants" Axes XPath en Java & selenium- P>



pour localiser le "tableau" présent à l'intérieur "div =" démo4a "' p>


pour l'étape 1: p> xxx pré>

Pour l'étape 2: -------- - aucune idée de la façon de le faire !!! --------- p>

pour l'étape 3: p> xxx pré>

Qu'est-ce que j'ai essayé jusqu'à maintenant en utilisant les axes XPath "suivants" dans Java & Sélénium- p>


pour localiser le "tableau" présent à l'intérieur "div =" démo4a "' p>


pour l'étape 1: p>

List<WebElement> table4_a_Data = 
    tableLocator.findElements(
        By.xpath("following::table[1]")
    );


3 commentaires

Merci beaucoup à tous ceux qui ont répondu à ma requête. Après avoir traversé les suggestions données par vous tous et après avoir fait un essai et une erreur, je pourrais proposer la condition exacte que je cherchais. Mon code ressemble maintenant à ceci - '' 'weibelement table3_1data = gstr3bfullpagedata.findelement (by.xpath ("// * / Suivant :: * [Te XT () =' 4. ITC éligible '] / Suivant :: * [ Texte () = '(a) ITC disponible (entier ou en partie)'] ")"); Liste asd = table3_1data.findelements (by.xpath ("./ suivant :: Tableau [1]")); '' '


Ici, je suis d'abord localiser le texte '4. ITC éligible '. Ce texte peut être n'importe où dans le document HTML. Ensuite, sans prendre l'aide de tags, c'est-à-dire que, span, etc., je localisise le texte "(A) ITC disponible (en totalité ou en partie)". Ce texte peut également être présent n'importe où dans le document HTML, sauf que je dois venir après le texte "4. ITC éligible ', pas avant cela. Pour cela, j'utilise les axes XPath "suivants".


De même, je peux utiliser cette chaîne pour parcourir autant de textes que je le souhaite, dans l'ordre de leur emplacement dans le document HTML, sans faire d'utiliser des chemins absolus ou relatifs.


4 Réponses :


0
votes

Vous pouvez essayer d'utiliser des locators XPath comme

// * [@ ID = 'Demo4a'] / Table

Si vous devez utiliser le texte pour identifier la table, essayez comme

(// * [texte () = 'admissible itc'] //..//..//..// table) [1]


0 commentaires

0
votes

xpath pour récupérer "(A) ITC disponible" Elément:

//div[.="Eligible ITC"]//div[contains(.,"(A)")]/following-sibling::div[1]/table


3 commentaires

Non, il n'est pas nécessaire de "suivre". Mais je dois atteindre la "table" souhaitée uniquement en utilisant les "textes" dans l'ordre de leur occurrence dans le document HTML.


J'essaie également d'éviter l'utilisation de n'importe quel "identifiant" ou "classe" pour localiser les "tables".


Merci pour votre réponse. J'ai ajouté mon commentaire sous la première requête principale. Jetez un coup d'oeil s'il vous plait.



0
votes

Vous pouvez essayer le code ci-dessous:

WebElement tableA = gstr3bFullPageData.findElement(By.cssSelector("#demo4a table"))
WebElement tableB = gstr3bFullPageData.findElement(By.cssSelector("#demo4b table"))


2 commentaires

J'essaie d'éviter d'utiliser n'importe quel "ID" pour localiser les tables. Je souhaite utiliser uniquement les "textes" séquentiellement (dans l'ordre de leur emplacement dans le document HTML) pour atteindre la "table" souhaitée.


D'accord. Que d'essayer le premier code sans utiliser d'identifiant et avec la localisation séquentielle



0
votes

Je pense que les expressions suivantes répondent à vos besoins en pas.

Pour obtenir votre première table, essayez cette expression xpath xxx

pour obtenir l'autre, essayez xxx

et , si vous voulez à la fois dans la même expression, essayez: xxx


3 commentaires

Merci d'avoir répondu. Je cherche une expression qui peut détecter le deuxième texte I.E. "(a) ITC disponible" directement à partir du premier texte I.E. "ITC éligible", sans utiliser de chemin absolus. Par exemple, je peux atteindre le premier texte directement par l'expression "// * [Normalize-Space (Texte ()) =" 4. ITC éligible "]". De là, je veux atteindre le deuxième texte directement, c'est-à-dire sans utiliser de chemin spécifique tel que DIV / A / SPAN, etc.


La raison de l'exigence ci-dessus est que, dans le document HTML d'origine, il existe de nombreux étiquettes DIV et SPAN INBETTONE Le premier et le deuxième texte. Donc, je ne veux pas dépendre de ces tags car je ne suis pas sûr combien d'entre eux sont là. Au lieu de cela, je veux sauter d'un texte à un autre texte en suivant.


@Ripon - Je ne suis pas sûr de vous comprendre tout à fait. J'ai édité les expressions (en modifiant un / sur // ) pour répondre à ce que je pense être votre problème. Voir si cela fonctionne. Sinon, je crains que vous puissiez modifier votre question pour ajouter plus de code HTML pour afficher le problème.