Maison > Java > javaDidacticiel > Pourquoi Selenium WebDriver lance-t-il une exception ElementNotInteractable et comment puis-je la corriger ?

Pourquoi Selenium WebDriver lance-t-il une exception ElementNotInteractable et comment puis-je la corriger ?

Susan Sarandon
Libérer: 2024-11-29 12:02:14
original
841 Les gens l'ont consulté

Why Does Selenium WebDriver Throw an ElementNotInteractableException, and How Can I Fix It?

Selenium WebDriver lance ElementNotInteractableException : dépannage et solutions

Introduction :

Dans Selenium WebDriver, l'ElementNotInteractableException est couramment rencontrée lorsque vous essayez d'interagir avec un élément qui n'est pas dans un état propice à l’interaction. Cette erreur peut se produire pour plusieurs raisons, notamment :

Raisons de l'exception ElementNotInteractable :

  • Superpositions temporaires : D'autres éléments peuvent être temporairement bloquant l'élément cible, le rendant inaccessible pour l'interaction.
  • Permanent Superpositions :Les éléments permanents peuvent obstruer de manière permanente l'élément cible, empêchant ainsi les clics.

Solutions pour ElementNotInteractableException :

1. Utilisation des attentes explicites :

  • Utilisez WebDriverWait et ExpectedConditions.elementToBeClickable pour attendre que l'élément cible devienne cliquable avant d'interagir avec lui.

2. Gestion des superpositions permanentes :

  • Castez l'instance WebDriver en JavascriptExecutor et exécutez la méthode JavaScript click() directement sur l'élément cible.

Problème spécifique dans le code fourni :

Le code donné pour la connexion à Gmail rencontre une exception ElementNotInteractableException lorsque en essayant de saisir le mot de passe. Cela est probablement dû au fait que le champ du mot de passe n'est pas entièrement rendu lorsque le code tente d'envoyer des clés.

Solution pour le code fourni :

Implémentez une attente explicite pour le champ de mot de passe pour qu'il devienne cliquable avant d'envoyer les clés. Voici le code corrigé :

System.setProperty("webdriver.gecko.driver", "C:\Users\Ruchi\workspace2\SeleniumTest\jar\geckodriver-v0.17.0-win64\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.manage().window().maximize();
String url = "https://accounts.google.com/signin";
driver.get(url);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
WebElement email_phone = driver.findElement(By.xpath("//input[@id='identifierId']"));
email_phone.sendKeys("[email protected]");
driver.findElement(By.id("identifierNext")).click();
WebElement password = driver.findElement(By.xpath("//input[@name='password']"));
WebDriverWait wait = new WebDriverWait(driver, 20);
wait.until(ExpectedConditions.elementToBeClickable(password)); // Explicit wait
password.sendKeys("test1");
driver.findElement(By.id("passwordNext")).click();
Copier après la connexion

Ce code introduit une attente explicite, permettant au champ de mot de passe de s'afficher correctement dans le DOM HTML avant de tenter d'interagir avec lui, résolvant ainsi efficacement le problème ElementNotInteractableException.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal