1
votes

Comment puis-je faire défiler la souris dans le menu spécifique de la fenêtre principale de Java Selenium WebDriver

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!


1 commentaires

Publiez votre HTML.


3 Réponses :


1
votes

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);


2 commentaires

Merci @ kingkong324; J'ai également essayé avec EventfiringWebDriver, cela a fonctionné.


vous êtes les bienvenus @Ronak. Veuillez marquer cette réponse comme acceptée.



0
votes

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();


1 commentaires

La réponse mentionnée ci-dessus convient mieux au défilement et au clic. Cela correspond dans presque tous les cas.



1
votes

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;


0 commentaires