Sự cố khi chọn các nút Radio bằng Selenium - JAVA
Tôi đang cố gắng tự động hóa một số thử nghiệm bằng Selenium trên Chrome. Tôi đang gặp sự cố khi chọn các nút radio trước khi chuyển sang bước tiếp theo. Tôi liên tục gặp lỗi 'NoSuchElementException' với mọi phương pháp tôi thử để chọn nút radio. Dưới đây là mã html dành cho các nút radio, tôi đang cố gắng chọn "Mới (Trống)" đầu tiên.
<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>
Dưới đây là một số phương pháp tôi đã thử chọn nó (chế độ ngủ của chuỗi nằm trong đó vì đó là một vấn đề phổ biến mà mọi người quan sát thấy với các nút radio):
Thread.sleep(5000);
webDriver.findElement(By.xpath("//input[@id='New (Empty)']")).click();
Thread.sleep(5000);
webDriver.findElement(By.id("New (Empty)")).click();
Tôi đã thử những người khác nhưng không theo dõi được, tất cả đều gặp lỗi NoSuchElementException giống nhau.
Tôi đã cố gắng chọn nó bằng cách tạo một Danh sách như được đề xuất trên chuỗi khác bên dưới, vì điều này, tôi gặp lỗi idex vì danh sách không chứa gì:
webDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
List<WebElement> methods = webDriver.findElements(By.name("selections"));
methods.get(0).click();
Trả lời
Đối click()với phần tử có văn bản là Mới (Trống), bạn có thể sử dụng một trong các Chiến lược định vị sau:
cssSelector:webDriver.findElement(By.cssSelector("input[id*='Empty'][value='emptyAssembly']")).click();xpath:webDriver.findElement(By.xpath("//input[@value='emptyAssembly' and contains(@id, 'Empty')]")).click();
Tuy nhiên, vì phần tử là phần tử động nên click()đối với phần tử bạn cần tạo WebDriverWait cho elementToBeClickable()và bạn có thể sử dụng một trong các Chiến lược định vị sau:
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();
Cố gắng tạo tệp .html cục bộ bằng mã HTML được cung cấp của bạn và thử lại các phương pháp của bạn trên tệp HTML cục bộ đó. Tôi đã thử và tất cả các phương pháp của bạn đang hoạt động hoàn hảo.
Vấn đề không nằm ở phương pháp hay tập lệnh của bạn, mà là vấn đề khác. Có thể là những phần tử đó là động hoặc không thể nhấp được vào thời điểm đó.
Vì vậy, bạn có thể cung cấp thêm một số chi tiết. Giống như kịch bản hoặc trường hợp thử nghiệm là gì, các bước trước đó để đạt được điểm đó là gì (nhấp vào các nút radio đó). Và Nếu có thể, hãy cung cấp thêm một số mã HTML (thẻ mẹ) và ảnh chụp màn hình trang web của bạn.