Probleme beim Auswählen von Optionsfeldern mit Selenium - JAVA

Aug 18 2020

Ich versuche, einige Tests mit Selenium in Chrome zu automatisieren. Ich habe ein Problem mit der Auswahl von Optionsfeldern, bevor ich mit dem nächsten Schritt fortfahre. Ich bekomme ständig einen 'NoSuchElementException'-Fehler bei jeder Methode, die ich versuche, um das Optionsfeld auszuwählen. Unten ist der HTML-Code für die Optionsfelder, ich versuche, das erste "Neu (leer)" auszuwählen.

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

Unten sind einige der Methoden, mit denen ich versucht habe, es auszuwählen (der Thread-Schlaf ist dort, da dies ein häufiges Problem war, das Leute mit Optionsfeldern beobachteten):

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

Ich habe andere ausprobiert, aber sie nicht im Auge behalten, sie haben alle den gleichen NoSuchElementException-Fehler ausgegeben.

Ich habe versucht, es auszuwählen, indem ich eine Liste erstellt habe, wie in einem anderen Thread unten vorgeschlagen, dafür erhalte ich einen Idex-Fehler, da die Liste nichts enthält:

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

Antworten

DebanjanB Aug 18 2020 at 04:38

Um click()das Element mit Text als Neu (Leer) zu markieren, können Sie eine der folgenden Locator-Strategien verwenden :

  • cssSelector:

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

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

Da es sich bei dem Element jedoch um ein dynamisches Element handelt, müssen Sie für das Element WebDriverWaitclick() induzieren , und Sie können eine der folgenden Locator-Strategien verwenden :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

Versuchen Sie, eine lokale HTML-Datei mit Ihrem bereitgestellten HTML-Code zu erstellen, und versuchen Sie Ihre Methoden erneut an dieser lokalen HTML-Datei. Ich habe es versucht und alle Ihre Methoden funktionieren perfekt.

Das Problem liegt nicht in Ihren Methoden oder Ihrem Skript, es ist etwas anderes. Möglicherweise sind diese Elemente zu diesem Zeitpunkt dynamisch oder nicht anklickbar.

Kannst du also ein paar mehr Details angeben? Was ist das Szenario oder der Testfall, was sind die vorherigen Schritte, um diesen Punkt zu erreichen (Klicken auf diese Optionsfelder). Und wenn möglich, stellen Sie dann etwas mehr HTML-Code (übergeordnete Tags) und einen Screenshot Ihrer Webseite bereit.