Selenium을 사용하여 라디오 버튼 선택 문제-JAVA

Aug 18 2020

Chrome에서 Selenium을 사용하여 일부 테스트를 자동화하려고합니다. 다음 단계로 이동하기 전에 라디오 버튼을 선택하는 데 문제가 있습니다. 라디오 버튼을 선택하려고 시도하는 모든 방법에서 'NoSuchElementException'오류가 계속 발생합니다. 아래는 라디오 버튼에 대한 html 코드입니다. 첫 번째 "New (Empty)"를 선택하려고합니다.

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

다음은 내가 그것을 선택하려고 시도한 몇 가지 방법입니다 (라디오 버튼으로 사람들이 관찰 한 일반적인 문제이기 때문에 스레드 절전이 거기에 있습니다).

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

나는 다른 사람들을 시도했지만 추적하지 않았으며 모두 동일한 NoSuchElementException 오류가 발생했습니다.

아래의 다른 스레드에서 제안한대로 목록을 만들어 선택하려고했습니다. 목록에 아무것도 포함되어 있지 않기 때문에 idex 오류가 발생합니다.

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

답변

DebanjanB Aug 18 2020 at 04:38

click()같은 텍스트 요소에 새로운 (빈) 다음 중 하나 사용할 수 있습니다 로케이터 전략 :

  • cssSelector:

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

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

요소가 동적 요소가 너무입니다 그러나 click()요소에 당신은 유도 할 필요가 WebDriverWait을 을 위해 elementToBeClickable()당신은 다음 중 하나 사용할 수 있습니다 로케이터 전략 :

  • 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

제공된 HTML 코드로 로컬 .html 파일을 만들고 해당 로컬 HTML 파일에서 메서드를 다시 시도하십시오. 나는 시도했고 모든 방법이 완벽하게 작동합니다.

문제는 당신의 방법이나 스크립트가 아닙니다. 해당 요소는 동적이거나 해당 지점에서 클릭 할 수 없습니다.

따라서 좀 더 자세한 정보를 제공 할 수 있습니다. 시나리오 또는 테스트 케이스와 마찬가지로 해당 지점에 도달하기위한 이전 단계는 무엇입니까 (해당 라디오 버튼 클릭). 그리고 가능하다면 더 많은 HTML 코드 (상위 태그)와 웹 페이지의 스크린 샷을 제공하세요.