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,
3 Réponses :
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.
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é.
La sélection des éléments dans ReadOnlyCollections a résolu le problème. Merci beaucoup :)
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.
Mettez à jour la question avec un peu plus du HTML externe
Ajout de plus de HTML externe