Je veux compter le nombre d'éléments visant à obtenir tous leurs noms et à les stocker dans un tableau.
Les noms sont surlignés comme indiqué dans l'image
Mon code:
Set a = bot.findElementsByClassName("board-canvas", 5).Count
J'ai essayé:
Public Sub seleniumtutorial()
Dim bot As New SeleniumWrapper.WebDriver
Dim a As WebElement
Dim b As WebElement
Dim x() As Integer
bot.Start "chrome", "https://trello.com/login"
bot.get "/"
bot.Type "name=user", "biaverly@id.uff.br"
bot.Type "name=password", "carambola69"
bot.clickAndWait "id=login"
bot.findElementByLinkText("Gestão de Pessoas").Click
et trouve des éléments par xpath et id.
3 Réponses :
findElementsByClassName est certainement ce que vous voulez mais votre utilisation ne semble pas correcte. Je suis presque sûr que .count renvoie un long, pas un élément Web ou un tableau d'éléments Web. Je suis également presque sûr que cela ne prend pas un deuxième paramètre, qu'essayez-vous d'accomplir avec , 5 et quel était votre message d'erreur?
Pour obtenir le nombre d'éléments dans cette classe
Dim classTxt as String
Set a = bot.findElementsByClassName("board-canvas")
For each b in a
classTxt = b.Text
Next b
Se référant au dernier élément de cette classe
bot.findElementsByClassName("board-canvas").Item(classCount).Text
Le contenu du dernier élément de cette classe
bot.findElementsByClassName("board-canvas").Item(classCount)
Maintenant, malheureusement, c'est là que je peux dévier un peu parce que je n'ai pas mon travail disponible pour référence, mais je pense que vous pouvez récupérer la collection et parcourir la classe comme ça
Dim classCount as Long
classCount = bot.findElementsByClassName("board-canvas").Count
Attention: ce qui suit est pour le sélénium basique vba. Cela utilise la bibliothèque de types Selenium et est basé sur le développement de @ florentbr à partir de ici . La syntaxe que vous utilisez me fait penser que la question est potentiellement mal étiquetée car la syntaxe, pour la plupart, concerne sélénium IDE . Vous ne savez pas si vous convertissez un script? Je ne me souviens pas que VBA soit une langue prise en charge pour l'EDI mais ......
Les en-têtes Trello seront le nom de classe list-header-name .
J'utiliserais plus rapidement .FindElementsByCss
So,
Option Explicit
Public Sub SeleniumTutorial()
Dim bot As WebDriver, titles As Object, i As Long
Dim numberOfWebElements As Long, names(), t As Date
Const MAX_WAIT_SEC As Long = 10
Set bot = New ChromeDriver
With bot
.get "https://trello.com/login"
.Window.Maximize
.FindElementById("user").SendKeys "userName"
.FindElementById("password").SendKeys "passWord"
.FindElementById("login").Click
.FindElementByLinkText("Gestão de Pessoas", timeout:=5000).Click '< named argument
t = Timer
Do
On Error Resume Next
Set titles = bot.FindElementsByCss(".list-header-name")
numberOfWebElements = titles.Count
On Error GoTo 0
If Timer - t > MAX_WAIT_SEC Then Exit Do
Loop While numberOfWebElements = 0
If numberOfWebElements = 0 Then Exit Sub
ReDim names(1 To numberOfWebElements)
For i = 1 To titles.Count
names(i) = titles.item(i).Text
Next
Stop 'delete me later
End With
End Sub
Le "." avant list-header-name est un css sélecteur de classe . Les navigateurs modernes sont optimisés pour cela.
Le , 5 est la valeur de l'argument minimum ; comme vous n'avez pas utilisé d'arguments nommés, la correspondance sera positionnelle. Le troisième argument serait timeout . Le minimum et le timeout sont facultatifs.
Désormais, lorsque vous utilisez le mot-clé Set , il s'agit de l'attribuer à un variable objet:
Dim numberOfWebElements As Long numberOfWebElements = titles.Count
Vous n'essayez pas de récupérer une propriété en même temps. Tentative:
Set titles = bot.FindElementsByCss(".list-header-name").Count
devrait conduire à une erreur de non-concordance de type .
Vous pouvez prendre séparément le décompte webElement de la collection avec
Dim titles As Object
Set titles = bot.FindElementsByCss(".list-header-name")
Pour trello, il existe des identifiants que vous pouvez utiliser pour vous connecter. J'utiliserais ceux-ci et la méthode SendKeys
Exemple de plan:
bot.FindElementsByCss(".list-header-name")
Ah, merci d'avoir expliqué le deuxième paramètre. Dans mon travail, je n'utilise pas d'attentes explicites. Je le jette dans une boucle pour continuer à essayer jusqu'à ce qu'il réussisse, j'appuie sur une touche pour arrêter, ou un nombre arbitraire d'itérations s'est terminé et je suis invité à quitter ou à continuer d'essayer.
Tout ce qui fonctionne pour vous :-) Je préfère trouver la méthode qui m'offre la première sortie, bien que ce ne soit pas toujours facile / possible (du moins d'après mon expérience) à trouver.
N'utilisez pas ça. Voir ma réponse ci-dessus.
Si j'utilise Set title = bot.FindElementsByCss (". List-header-name"). Count affiche le message objet ne prend pas en charge cette propriété ou méthode sinon si je utilisez le code de trou de do, les titres sont vides donc numberOfWebElements = 0.
Pas à pas avec F8 - mon code utilise une boucle pendant jusqu'à 10 secondes pour permettre aux titres de cartes trello d'être présents. Le sous-marin doit quitter Si numberOfWebElements = 0. Utilisez-vous le code exactement comme ci-dessus mais avec vos informations d'identification?
J'ai obtenu le xpath à partir d'un élément aléatoire de la classe "js-list list-wrapper" et c'était: //*[@id="board"letter/div[5ITED.
Donc je l'ai résolu en utilisant
Dim titles As Object
Set titles =
bot.findElementsByXPath("//[@id=""board""]/div")
Dim ab As Long
ab = titles.Count
MsgBox ab
Veuillez ne pas publier de photos de HTML. Utilisez l'outil de capture via l'édition.
Je suis nouveau ici, ils ne me laissent pas encore faire ça. :\ J'ai essayé
Oh vraiment? Vous pouvez utiliser l'outil d'extrait de code? Si vous utilisez pastebin.com, je peux le modifier pour vous à partir du lien que vous partagez