Je travaille sur un système qui a une frontend basée sur le Web que je teste avec sélénium. Sur une seule page, le contenu est chargé de manière dynamique lors du défilement (vous savez peut-être que de la liste d'amis de Facebook), car c'est l'une des conditions requises.
Faites défiler vers le bas avec Selenium WebDriver (J'utilise Chrome) ne doit pas être un problème via JavaScript . Mais il y a un problème avec le contenu ajouté de manière dynamique. Comment puis-je rendre le webDriver à trouver ces éléments? P>
J'ai essayé ce qui suit pour faire défiler jusqu'à ce que plus aucun contenu ne soit chargé: p> mais bien que la page Fait défiler la première fois et certains sont maintenant chargés correctement, ils ne seront pas trouvés par la fonction FindElements des pilotes (par). P> a déjà fait face à ce problème ?? Je serais très heureux que quelqu'un puisse m'aider à jouer une solution pour cela! P> Cordialement, Benjamin P> P>
3 Réponses :
Je pense que le problème attend que le contenu dynamique finisse le chargement. Essayez d'attendre 3 secondes juste avant la Findemplements? En C # le code serait thread.sleep (3000); p>
bonne idée, essayé de l'avoir essayé ... Les Fondelements remettent toujours les éléments qui ont été chargés depuis le début sur
@Benjamin: Avez-vous essayé une fois plus longtemps comme 5 secondes? Pourriez-vous vérifier en séléniumide que le sélecteur CSS fonctionne lorsque l'élément est présent? Je ferais un test dans l'IDE, mais il est difficile de simuler le défilement - vous pouvez essayer KeyPress | xpath = / html / corps / | 34 (KeyCode 34 est un pagedown), puis WaitForElementpresent ...
Je recommanderais d'utiliser WebDriverwait avec les ConditTons attendus.
//scroll down with Javascript first WebDriverWait wait = new WebDriverWait(driver, 30); WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("selector"))); //interact with your element element.click()
+1. Pas une mauvaise approche, mais me semble mieux choisir de choisir couramment l'attente de cette affaire.
Essayez d'utiliser Fluent Wait en particulier. La principale caractéristique est la suivante:
une implémentation de l'interface d'attente pouvant avoir son délai d'attente et son intervalle de vote configuré à la volée.
Chaque instance flueures définit la durée maximale pour attendre une condition, ainsi que la fréquence avec laquelle vérifier la condition. En outre, l'utilisateur peut configurer l'attente pour ignorer des types d'exceptions spécifiques tout en attendant, telles que NosuchelementExceptions à la recherche d'un élément sur la page. Em> p> la méthode Décrit renvoie votre élément Web que vous pouvez utiliser avec.
Donc, l'approche est la suivante:
1) Vous devez trouver les sélecteurs d'éléments que vous attendez d'être rendus après le défilement
par exemple. p> 2) faites défiler vers le bas avec JS
3) P> WebElement neededElement = fluentWait(cssSelector);
neededElement.click();
//neededElement.getText().trim();
Je n'ai qu'une seule question - comment fonctionne-t-elle une nouvelle fonction
Pourriez-vous me clarifier un peu: que mentionnez-vous dire de la fonction de fonction en Java?
Je ne suis pas sûr de quoi vous voulez dire exactement dire «Modèle de fonction» mais nouvelle fonction
SELENIUM.GOOGLECODE. com / svn / coffre / docs / API / Java / org / openqa / ... Essayez de vous renseigner sur la nouvelle fonction définie dans l'API de selenium ici
Vous avez raison, j'ai été confondu avec deux trois concepts :) Merci pour la réponse du patient
Je vais devoir faire défiler vers le bas afin de charger les éléments (via Ajax). Comme je l'ai dit, j'utilise ChromeRiver.