Kesulitan memilih tombol Radio menggunakan Selenium - JAVA
Saya mencoba mengotomatiskan beberapa pengujian menggunakan Selenium di Chrome. Saya mengalami masalah dengan memilih tombol radio sebelum melanjutkan ke langkah berikutnya. Saya terus-menerus mendapatkan kesalahan 'NoSuchElementException' dengan setiap metode yang saya coba untuk memilih tombol radio. Di bawah ini adalah kode html yang untuk tombol radio, saya mencoba memilih yang pertama "Baru (Kosong)".
<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>
Di bawah ini adalah beberapa metode yang saya coba pilih dengan (utas tidur ada di sana karena itu adalah masalah umum yang diamati orang dengan tombol radio):
Thread.sleep(5000);
webDriver.findElement(By.xpath("//input[@id='New (Empty)']")).click();
Thread.sleep(5000);
webDriver.findElement(By.id("New (Empty)")).click();
Saya mencoba yang lain tetapi tidak melacaknya, mereka semua melakukan kesalahan NoSuchElementException yang sama.
Saya mencoba memilihnya dengan membuat Daftar seperti yang disarankan di utas lain di bawah ini, untuk ini saya mendapatkan kesalahan idex karena daftar tidak berisi apa-apa:
webDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
List<WebElement> methods = webDriver.findElements(By.name("selections"));
methods.get(0).click();
Jawaban
Untuk click()
pada elemen dengan teks sebagai Baru (Kosong) Anda dapat menggunakan salah satu dari Strategi Penunjuk Lokasi berikut :
cssSelector
:webDriver.findElement(By.cssSelector("input[id*='Empty'][value='emptyAssembly']")).click();
xpath
:webDriver.findElement(By.xpath("//input[@value='emptyAssembly' and contains(@id, 'Empty')]")).click();
Namun, seperti unsur adalah unsur dinamis sehingga untuk click()
pada elemen yang Anda butuhkan untuk menginduksi WebDriverWait untuk elementToBeClickable()
dan Anda dapat menggunakan salah satu dari berikut Locator Strategi :
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();
Coba buat file .html lokal dengan kode HTML yang Anda berikan dan coba metode Anda lagi pada file HTML lokal tersebut. Saya telah mencoba dan semua metode Anda bekerja dengan sempurna.
Masalahnya bukan pada metode atau skrip Anda, melainkan sesuatu yang lain. Mungkin elemen tersebut dinamis atau tidak dapat diklik pada saat itu.
Jadi bisakah Anda memberikan beberapa detail lebih lanjut. Seperti apa skenario atau test case-nya, apa saja langkah-langkah sebelumnya untuk mencapai titik tersebut (mengklik radio button tersebut). Dan jika memungkinkan, berikan beberapa kode HTML (tag induk) dan screenshot halaman web Anda.