1
votes

Sélénium: sélection d'éléments avec des propriétés similaires à l'aide de la séquence

Besoin d'aide avec le script sélénium que j'écris en utilisant c #.

J'essaie de cliquer sur un élément en utilisant la propriété "class" mais le problème est qu'il y a un autre élément similaire qui partage exactement la même propriété et cet élément vient en premier d'où mon clic, frappe le premier élément à la place

De plus, "Classe" est le seul attribut disponible pour cet élément.

L'élément sur lequel je cherche à cliquer est "cam-taxpicker-button" sous la classe "progressTerm"

<div id = "LeftDivision" class = "LeftFrame">
 <div>
  <div class="cam-taxpicker">
    <div class="cam-taxpicker-button"></div>
  </div>
 </div>

 <div class="progressTerm">
  <div class="cam-taxpicker">
   <div class="cam-taxpicker-button"></div>
  </div>
 </div>
</div>

Est-il possible de conserver ces éléments dans une liste et itérer vers le deuxième élément et alors seulement effectuer l'action? Est-ce le meilleur moyen pour cela?

Ou y a-t-il une autre façon d'effectuer cette action?

Merci d'avance,


2 commentaires

Mettez à jour la question avec un peu plus du HTML externe


Ajout de plus de HTML externe


3 Réponses :


1
votes

Essayez le code ci-dessous

driver.FindElement(By.XPath("//div[@class='cam-taxpicker-button'][2]")).Click()

Ici [2] dans xpath représente le deuxième élément sur lequel vous souhaitez cliquer.


0 commentaires

1
votes

Afin de trouver tous les éléments avec la même propriété, vous pouvez utiliser la méthode driver.FindElements (); de selenium WebDriver.

Donc, dans votre cas, afin de tout trouver éléments avec le nom de classe 'cam-taxpicker-button' vous pouvez faire quelque chose comme ceci:

using System.Collections.ObjectModel;

ReadOnlyCollection<IWebElement> elements = driver.FindElements(By.ClassName("cam-taxpicker-button"));

Maintenant, il vous donnera une collection d'éléments qui correspond au ClassName donné et s'il y a ne sont que deux éléments sur lesquels vous pouvez cliquer sur le deuxième élément en faisant: elements [1] .Click ();

Vous pouvez aussi faire driver.FindElement (By.XPath ("// div [@ class = 'cam-taxpicker-button'] [2] ")). Cliquez sur (); mais dans ce cas, il ne trouvera toujours que le deuxième élément dans tout le DOM avec le nom de classe donné.


1 commentaires

La sélection des éléments dans ReadOnlyCollections a résolu le problème. Merci beaucoup :)



0
votes

Essayez le XPATH suivant s'il existe plus d'un élément avec le même nom de classe, il identifiera le dernier. S'il n'y a qu'un seul élément présent, il s'identifiera également.

WebDriverWait wait = new WebDriverWait(_driver, TimeSpan.FromSeconds(10));
wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable(By.XPath("(//div[@class='cam-taxpicker-button'])[last()]"))).Click();

Induire WebDriverWait Et attendre le ElementToBeClickable () et utiliser le xpath ci-dessus.

(//div[@class='cam-taxpicker-button'])[last()]

Dites-moi comment ça se passe.


0 commentaires