Problème de sélection des boutons radio à l'aide de Selenium - JAVA

Aug 18 2020

J'essaie d'automatiser certains tests en utilisant Selenium sur Chrome. Je rencontre un problème avec la sélection des boutons radio avant de passer à l'étape suivante. Je reçois constamment une erreur 'NoSuchElementException' avec chaque méthode que j'essaie pour sélectionner le bouton radio. Ci-dessous se trouve le code html qui est pour les boutons radio, j'essaie de sélectionner le premier "Nouveau (Vide)".

<td>
    <input type="radio" name="selections" value="emptyAssembly" id="New (Empty)" onclick="onSelection([emptyAssembly, existingAssembly, assemblyFile, virtualDocument], emptyAssembly)">
    New (Empty)
    <br>
    <input type="radio" name="selections" value="existingAssembly" id="Existing Template, Assembly or View" onclick="onSelection([emptyAssembly, existingAssembly, assemblyFile, virtualDocument], existingAssembly)">
    Existing Template, Assembly or View
    <br>
    <input type="radio" name="selections" value="assemblyFile" id="Assembly File" onclick="onSelection([emptyAssembly, existingAssembly, assemblyFile, virtualDocument], assemblyFile)">
    Assembly File
    <br>
    <input type="radio" name="selections" value="virtualDocument" id="Virtual Document" onclick="onSelection([emptyAssembly, existingAssembly, assemblyFile, virtualDocument], virtualDocument)">
    Virtual Document
    <br>
</td>

Vous trouverez ci-dessous quelques-unes des méthodes que j'ai essayées de sélectionner (le thread sleep est là car c'était un problème courant que les gens ont observé avec les boutons radio):

Thread.sleep(5000);
webDriver.findElement(By.xpath("//input[@id='New (Empty)']")).click();
Thread.sleep(5000);
webDriver.findElement(By.id("New (Empty)")).click();

J'en ai essayé d'autres mais je n'en ai pas gardé trace, ils ont tous lancé la même erreur NoSuchElementException.

J'ai essayé de le sélectionner en créant une liste comme suggéré sur un autre fil ci-dessous, pour cela j'obtiens une erreur idex puisque la liste ne contient rien:

webDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
List<WebElement> methods = webDriver.findElements(By.name("selections"));
methods.get(0).click();

Réponses

DebanjanB Aug 18 2020 at 04:38

Pour click()sur l'élément avec le texte comme nouveau (vide) , vous pouvez utiliser l'une des stratégies de localisation suivantes :

  • cssSelector:

    webDriver.findElement(By.cssSelector("input[id*='Empty'][value='emptyAssembly']")).click();
    
  • xpath:

    webDriver.findElement(By.xpath("//input[@value='emptyAssembly' and contains(@id, 'Empty')]")).click();
    

Cependant, comme l'élément est un élément dynamique, click()vous devez donc induire WebDriverWait pour l' élément elementToBeClickable()et vous pouvez utiliser l'une des stratégies de localisation suivantes :

  • cssSelector:

    new WebDriverWait(webDriver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("input[id*='Empty'][value='emptyAssembly']"))).click();
    
  • xpath:

    new WebDriverWait(webDriver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@value='emptyAssembly' and contains(@id, 'Empty')]"))).click();
    
Rahul_Rdr Aug 18 2020 at 05:27

Essayez de créer un fichier .html local avec votre code HTML fourni et réessayez vos méthodes sur ce fichier HTML local. J'ai essayé et toutes vos méthodes fonctionnent parfaitement.

Le problème n'est pas dans vos méthodes ou votre script, c'est autre chose. Peut-être que ces éléments sont dynamiques ou non cliquables à ce stade.

Pouvez-vous donc donner plus de détails. Comme quel est le scénario ou le cas de test, quelles sont les étapes précédentes pour atteindre ce point (en cliquant sur ces boutons radio). Et si possible, fournissez un peu plus de code HTML (balises parents) et une capture d'écran de votre page Web.