Problemi nella selezione dei pulsanti di opzione utilizzando Selenium - JAVA
Sto tentando di automatizzare alcuni test utilizzando Selenium su Chrome. Sto riscontrando un problema con la selezione dei pulsanti di opzione prima di passare al passaggio successivo. Ricevo costantemente un errore "NoSuchElementException" con ogni metodo che provo per selezionare il pulsante di opzione. Di seguito è riportato il codice html che è per i pulsanti di opzione, sto cercando di selezionare il primo "Nuovo (vuoto)".
<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>
Di seguito sono riportati alcuni dei metodi con cui ho tentato di selezionarlo (il thread sleep è presente poiché si trattava di un problema comune osservato dalle persone con i pulsanti di opzione):
Thread.sleep(5000);
webDriver.findElement(By.xpath("//input[@id='New (Empty)']")).click();
Thread.sleep(5000);
webDriver.findElement(By.id("New (Empty)")).click();
Ne ho provati altri ma non ne ho tenuto traccia, tutti hanno generato lo stesso errore NoSuchElementException.
Ho provato a selezionarlo creando un elenco come suggerito in un altro thread di seguito, per questo ottengo un errore idex poiché l'elenco non contiene nulla:
webDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
List<WebElement> methods = webDriver.findElements(By.name("selections"));
methods.get(0).click();
Risposte
Sull'elemento click()
con testo come Nuovo (vuoto) puoi utilizzare una delle seguenti strategie di localizzazione :
cssSelector
:webDriver.findElement(By.cssSelector("input[id*='Empty'][value='emptyAssembly']")).click();
xpath
:webDriver.findElement(By.xpath("//input[@value='emptyAssembly' and contains(@id, 'Empty')]")).click();
Tuttavia, poiché l'elemento è un elemento dinamico, quindi click()
sull'elemento è necessario indurre WebDriverWait per il elementToBeClickable()
ed è possibile utilizzare una delle seguenti strategie di localizzazione :
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();
Prova a creare un file .html locale con il codice HTML fornito e riprova i tuoi metodi su quel file HTML locale. Ho provato e tutti i tuoi metodi funzionano perfettamente.
Il problema non è nei tuoi metodi o script, è qualcos'altro. Potrebbero essere quegli elementi dinamici o non cliccabili in quel punto.
Quindi puoi fornire qualche dettaglio in più. Ad esempio qual è lo scenario o il test case, quali sono i passaggi precedenti per raggiungere quel punto (facendo clic su quei pulsanti di opzione). E se possibile, fornisci altro codice HTML (tag principali) e uno screenshot della tua pagina web.