J'essaie de trouver un élément Web dans Chrome à l'aide de Selenium WebDriver. Lorsque le pilote lance l'URL, une liste de projets est affichée et le pilote doit sélectionner un projet spécifique dans cette liste.
Tant que ce projet est en haut de la liste, c'est ok et peut trouver le projet, Cependant, si le projet est tout en bas de la liste (selon que la liste a été classée par ordre alphabétique et disons que l'enregistrement 57 de la liste est essayé d'être sélectionné), le test échoue et le pilote ne peut pas trouver l'élément Web !!! >
Je suis enfin arrivé à ce point que je dois faire défiler ma liste jusqu'à ce que cet élément apparaisse, mais selon cette barre de défilement est dans ce menu pas dans la fenêtre principale, cette commande n'est même pas exécutée! Dois-je identifier le menu du projet au pilote? comment puis-je faire défiler ce menu de projet dans la fenêtre? Je ne veux pas faire défiler la fenêtre Web principale, je dois seulement faire défiler la liste des projets.
J'ai essayé toutes les solutions possibles et je surfais sur le forum Stack Overflow ainsi que sur Internet, mais je n'ai pas pu ne corrige pas cette erreur. Ce serait formidable si vous jetiez un œil à ce code ci-dessous et me donniez quelques conseils. Veuillez me faire savoir si je dois fournir plus d'informations. Il est bon de mentionner ici que je lis le "projectName" de la feuille de calcul.
// Initially I need to hover the mouse on Select Project menu. Actions action = new Actions(driver); WebElement list = driver.findElement(By.xpath("//*[@id=\"gridview-1032\"]")); action.moveToElement(list); JavascriptExecutor js = (JavascriptExecutor) driver; // Now I need to scroll down till find my desire project in the list. WebElement Project = driver.findElement(By.xpath("//*[text()= '"+ projectName +"']")); js.executeScript("arguments[0].scrollIntoView(true);",Project); Project.click();
Résultat réel:
Exception dans le thread "main" org.openqa.selenium.NoSuchElementException: aucun élément de ce type: impossible de localiser l'élément: {"method": "xpath", "selector": "// * [text () = 'projectName']"}
Résultat attendu: Trouvez l'élément dans la liste et cliquez sur cet élément pour lancer le projet!
3 Réponses :
Voici ci-dessous le code qui a fonctionné pour moi. Ce code fonctionne très bien dans votre cas
Actions action = new Actions(driver); WebElement list = driver.findElement(By.xpath("//*[@id=\"gridview-1032\"]")); action.moveToElement(list); JavascriptExecutor js = (JavascriptExecutor) driver; // Now I need to scroll down till find my desire project in the list. WebElement Project = driver.findElement(By.xpath("//*[text()= '"+ projectName +"']")); js.executeScript("arguments[0].click();",Project);
Merci @ kingkong324; J'ai également essayé avec EventfiringWebDriver, cela a fonctionné.
vous êtes les bienvenus @Ronak. Veuillez marquer cette réponse comme acceptée.
J'ai pensé que cela pourrait être un problème pour quelqu'un d'autre, j'ajoute aussi ma solution, cela pourrait être utile:
// il trouve la liste et fait défiler 3000 pixels
WebElement Project = driver6.findElement(By.xpath("//*[text()= '"+ projectName +"']")); Project.click();
La réponse mentionnée ci-dessus convient mieux au défilement et au clic. Cela correspond dans presque tous les cas.
J'ai trouvé une solution alternative à cette question qui est plus simple:
// Créer une instance de l'exécuteur Javascript
Project.click();
// Identifier le WebElement qui apparaîtra après le défilement down
je.executeScript("arguments[0].scrollIntoView(true);",Project);
// exécute maintenant la requête qui défilera jusqu'à ce que cet élément n'apparaisse pas sur la page.
WebElement Project = driver.findElement(By.className("x-grid-item-container"));
/ / Connectez-vous au projet souhaité
JavascriptExecutor je = (JavascriptExecutor) driver;
Publiez votre HTML.