Problemas para seleccionar botones de radio usando Selenium - JAVA

Aug 18 2020

Estoy intentando automatizar algunas pruebas usando Selenium en Chrome. Tengo un problema con la selección de botones de radio antes de pasar al siguiente paso. Recibo constantemente un error 'NoSuchElementException' con cada método que intento para seleccionar el botón de opción. A continuación se muestra el código html que es para los botones de radio, estoy tratando de seleccionar el primer "Nuevo (Vacío)".

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

A continuación se muestran algunos de los métodos con los que he intentado seleccionarlo (el hilo de suspensión está ahí, ya que era un problema común que la gente observaba con los botones de opción):

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

Probé con otros pero no les hice seguimiento, todos lanzaron el mismo error NoSuchElementException.

Intenté seleccionarlo creando una Lista como se sugiere en otro hilo a continuación, para esto recibo un error de idex ya que la lista no contiene nada:

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

Respuestas

DebanjanB Aug 18 2020 at 04:38

Para click()en el elemento con texto como Nuevo (Vacío) puede usar cualquiera de las siguientes estrategias de localización :

  • cssSelector:

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

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

Sin embargo, como el elemento es un elemento dinámico, click()en el elemento necesita inducir WebDriverWait para el elementToBeClickable()y puede usar cualquiera de las siguientes estrategias de localización :

  • 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

Intente crear un archivo .html local con su código HTML proporcionado y vuelva a probar sus métodos en ese archivo HTML local. Lo he intentado y todos tus métodos funcionan perfectamente.

El problema no está en sus métodos o script, es otra cosa. Puede ser que esos elementos sean dinámicos o no se pueda hacer clic en ese punto.

Entonces, ¿puede proporcionar algunos detalles más? Como cuál es el escenario o caso de prueba, cuáles son los pasos previos para llegar a ese punto (haciendo clic en esos botones de radio). Y si es posible, proporcione más código HTML (etiquetas principales) y una captura de pantalla de su página web.