0
votes

Comment gérer le changement d'absolu xpath?

HTML:

/html/body/div/main/div/div/div[2]/div/div/div/div[1]/div/div***[4]***/div/div[2] the div[4] 


0 commentaires

6 Réponses :


-1
votes

Vous écrivez le code suivant

driver.findElement(By.xpath("//div[normalize-space()='Cloth']").click


4 commentaires

Ça ne fonctionne pas pour deux mots Exemple "Accessoires de mode"


Je n'ai pas eu votre question alors. Vous avez dit que vous souhaitez localiser la division qui a le chiffon de texte que j'ai fait. Si vous souhaitez localiser la DIV avec le texte acessoires de mode , puis écrivez pilote.findElement (by.xpath ("// div [normalize-espace () = 'Fashio N Acessories'] ") .Cliquez sur . Votre question n'est pas assez claire pour comprendre ce que vous voulez vraiment.


Ça ne fonctionnera que lors de l'ajout de pilote.findellement (by.xpath ("// div [texte (texte () normalize-espace () = 'Acessories de la mode']"). Je dois ajouter du texte ()


Celui-ci est le mauvais xPath // div [texte () normalize-espace () = 'Acessories de la mode'] , je ne vous ai pas demandé d'ajouter du texte (). Cela fonctionnerait parfaitement si vous ne remplacez que la chaîne chiffon avec acessoires de mode



0
votes

absolu xpath: il contient le chemin complet de l'élément racine à l'élément de désir.

XPath relatif: Cela ressemble davantage à commencer simplement en référençant l'élément que vous souhaitez et passez de l'emplacement particulier. p>

Vous utilisez toujours le chemin relatif pour tester un élément. La raison derrière celle-ci est que si vous apportez une modification architecturale du site Web, le changement n'augmente pas le test ou la sélection de l'élément. P>

Utilisez donc une relative xpath qui est comme suit P>

WebElement cloth = driver.findElement(By.xpath("//div[normalize-space()='Cloth']"));
cloth.click();


0 commentaires

0
votes

Je recommanderais d'utiliser XPath personnalisé. Comme indiqué ci-dessous:

driver.findElement(By.xpath("//div[contains(text(), 'Cloth')]").click

driver.findElement(By.xpath("//div[contains(text(), 'Fashion Acessories')]").click


0 commentaires

0
votes

Vous devez utiliser un groupe XPath relatif dans ce cas.

Vous pouvez utiliser n'importe quel XPath des options ci-dessous. Les deux premiers trouveront l'élément par texte et la 3ème option par classe.

1 >> pilote.findElement (by.xpath ("// div [contient (texte (), 'tissu')]")))))))))))))). Cliquez sur ();

2 >> pilote.findElement (by.xpath ("// * [contient (texte (), 'tissu')]")))))))))). Cliquez sur ();

3 >> pilote.findElement (by.xpath ("// div [@ class = 'composant-multifil ligne-title-title']") "). Cliquez sur (); < / p>

Faites-moi savoir si le même nom de classe existe également pour d'autres éléments.


0 commentaires

0
votes

Juste pour vous Référence: XPath est utilisé pour trouver l'emplacement de tout élément sur une page Web à l'aide de la structure HTML DOM.

L'inconvénient de l'absolu xpath est que s'il y a des modifications apportées dans le chemin de l'élément, alors que XPath est échoué.

Donc, dans ce cas XPaths relatif peut être utilisé:

// div [contient (texte (), 'tissu')] ou // * [contient (texte (), 'tissu')]

// div [contient (texte (), 'Acessories de la mode')] ou // * [contient (texte (), 'mode Acessories ')]

Comment utiliser: pilote.findellement (by.xpath ("// div [contient (texte (), 'tissu')]"));


0 commentaires

1
votes

Pour commencer par l'utilisation de XPath Absolute, présentez certains inconvénients, comme lorsque les nouveaux éléments sont ajoutés, le xpath des éléments précédemment identifiés continuera à changer. Par conséquent, la solution serait d'utiliser XPath relative .

Selon le HTML que vous avez fourni, cliquez sur l'élément avec du texte sous la forme Tissu Vous pouvez utiliser ce qui suit < a href = "https://stackoverflow.com/questions/48369043/official-locator-strategies-for-the-webdriver/48376890#48376890"> Locator stratégie :

  • xpath a: XXX

  • xpath b: XXX


0 commentaires