Проблемы с выбором радиокнопок с помощью Selenium - JAVA

Aug 18 2020

Я пытаюсь автоматизировать тестирование с помощью Selenium в Chrome. У меня возникла проблема с выбором переключателей, прежде чем перейти к следующему шагу. Я постоянно получаю ошибку «NoSuchElementException» с каждым методом, который я пытаюсь выбрать для выбора переключателя. Ниже приведен html-код для переключателей. Я пытаюсь выбрать первый «Новый (пустой)».

<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-кода (родительские теги) и снимок экрана вашей веб-страницы.