Selenium kullanarak Radyo düğmelerini seçmede sorun - JAVA
Chrome'da Selenium kullanarak bazı testleri otomatikleştirmeye çalışıyorum. Sonraki adıma geçmeden önce radyo düğmelerini seçerken bir sorunla karşılaşıyorum. Radyo düğmesini seçmek için denediğim her yöntemde sürekli bir 'NoSuchElementException' hatası alıyorum. Aşağıda radyo düğmeleri için olan html kodu var, ilk "Yeni (Boş)" u seçmeye çalışıyorum.
<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>
Aşağıda, seçmeye çalıştığım yöntemlerden birkaçı var (iş parçacığı uykusu, insanların radyo düğmeleriyle gözlemlediği yaygın bir sorundu):
Thread.sleep(5000);
webDriver.findElement(By.xpath("//input[@id='New (Empty)']")).click();
Thread.sleep(5000);
webDriver.findElement(By.id("New (Empty)")).click();
Başkalarını denedim ama onları takip etmedim, hepsi aynı NoSuchElementException hatasını verdi.
Aşağıdaki diğer iş parçacığında önerildiği gibi bir Liste oluşturarak onu seçmeye çalıştım, bunun için liste hiçbir şey içermediğinden bir idex hatası alıyorum:
webDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
List<WebElement> methods = webDriver.findElements(By.name("selections"));
methods.get(0).click();
Yanıtlar
To click()
olarak metinle elemana Yeni (Boş) aşağıdakilerden birini kullanabilirsiniz Bulucu Stratejileri :
cssSelector
:webDriver.findElement(By.cssSelector("input[id*='Empty'][value='emptyAssembly']")).click();
xpath
:webDriver.findElement(By.xpath("//input[@value='emptyAssembly' and contains(@id, 'Empty')]")).click();
Eleman dinamik öğe için böyledir Ancak click()
elemana sen ikna etmek gerek WebDriverWait için elementToBeClickable()
ve aşağıdakilerden birini kullanabilirsiniz Bulucu Stratejileri :
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();
Sağladığınız HTML kodunuzla yerel bir .html dosyası oluşturmaya çalışın ve o yerel HTML dosyasında yöntemlerinizi tekrar deneyin. Denedim ve tüm yöntemleriniz mükemmel çalışıyor.
Sorun sizin yöntemleriniz veya yazınız değil, başka bir şey. Bu öğeler dinamik olabilir veya o noktada tıklanabilir olmayabilir.
Yani biraz daha ayrıntı verebilir misin? Senaryo veya test senaryosu gibi, o noktaya ulaşmak için önceki adımlar nelerdir (bu radyo düğmelerine tıklayarak). Ve mümkünse, daha fazla HTML kodu (ana etiketler) ve web sayfanızın ekran görüntüsünü sağlayın.