Problema ao selecionar botões de rádio usando Selenium - JAVA

Aug 18 2020

Estou tentando automatizar alguns testes usando o Selenium no Chrome. Estou tendo um problema ao selecionar os botões de opção antes de passar para a próxima etapa. Estou constantemente recebendo um erro 'NoSuchElementException' com todos os métodos que tento selecionar o botão de opção. Abaixo está o código html que é para os botões de opção, estou tentando selecionar o primeiro "Novo (Vazio)".

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

Abaixo estão alguns dos métodos com os quais tentei selecioná-lo (o thread sleep está lá, pois era um problema comum que as pessoas observavam com os botões de opção):

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

Eu tentei outros, mas não os acompanhei, todos lançaram o mesmo erro NoSuchElementException.

Tentei selecioná-lo criando uma lista conforme sugerido em outro tópico abaixo, para isso recebo um erro de idex, pois a lista não contém nada:

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

Respostas

DebanjanB Aug 18 2020 at 04:38

Para click()no elemento com texto como Novo (Vazio) , você pode usar uma das seguintes estratégias de localizador :

  • cssSelector:

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

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

No entanto, como o elemento é um elemento dinâmico, click()você precisa induzir WebDriverWait para o elemento elementToBeClickable()e pode usar qualquer uma das seguintes estratégias de localizador :

  • 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

Tente criar um arquivo .html local com o código HTML fornecido e tente seus métodos novamente nesse arquivo HTML local. Eu tentei e todos os seus métodos estão funcionando perfeitamente.

O problema não está em seus métodos ou script, é outra coisa. Pode ser que esses elementos sejam dinâmicos ou não clicáveis ​​nesse ponto.

Então você pode fornecer mais alguns detalhes. Como qual é o cenário ou caso de teste, quais são as etapas anteriores para chegar a esse ponto (clicar nesses botões de opção). E, se possível, forneça mais algum código HTML (tags principais) e uma captura de tela da sua página da web.