2013-02-13 4 views
7

Tôi muốn có thể chọn nút radio dựa trên đầu vào Người dùng. Nút radio này có nhiều tùy chọn có cùng tên.Chọn nút radio dựa trên đầu vào của người dùng trong trình điều khiển web Selenium

<th class="radio"> 
<td> 
    <label for="form-1-input-3"> 
    <input id="form-1-input-3" type="radio" checked="" value="true" name="enabled"> 
    Enabled 
    </label> 
    <label for="form-1-input-4"> 
    <input id="form-1-input-4" type="radio" value="false" name="enabled"> 
    Disabled 
    </label> 

Nếu "kích hoạt" được chuyển dưới dạng chuỗi, tôi sẽ có thể chọn nút radio đầu tiên mà có văn bản rõ ràng, Enabled và nếu "vô hiệu hóa" được chuyển dưới dạng chuỗi, tôi sẽ có thể chọn nút radio có văn bản hiển thị, Đã tắt.

Tôi gặp khó khăn vì tên nút radio giống nhau. Mã bên dưới không tìm thấy phần tử với toán tử AND cho Xpath. Có ai gặp phải điều này trước đây và đã tìm thấy một giải pháp?

String enableRadioButtonXPath = "//input[contains(@id,'form-') and contains(@value, 'enabled')]"; 
String enableRadioButtonOption = "enabled"; 
String disableRadioButtonOption = "disabled"; 

WebElement enableRadioButton = webdriver1.findElement(By.name(enableRadioButtonOption)); 
enableRadioButton.click(); 
+0

Giá trị 'id' của hai nút radio khác nhau thì tại sao bạn không thể sử dụng Id. Có lý do cụ thể nào không? – Manigandan

+0

id cho các nút radio được tạo động, vì vậy không thể xác định vị trí theo id – user1886649

Trả lời

9

Logic này có thể hữu ích cho bạn.

Đối với việc lựa chọn đầu tiên sử dụng nút radio bên dưới locator

driver.findElement(By.xpath("//label[contains(.,'Enable')]/input")).click(); 

Đối với việc lựa chọn nút radio thứ hai trong đó có vô hiệu hóa văn bản

driver.findElement(By.xpath("//label[contains(.,'Disable')]/input")).click(); 
+0

Cảm ơn bạn đã cung cấp logic này ngắn và hoạt động. – user1886649

4

Có lẽ điều này có thể giúp:

public void selectByName (final WebDriver driver, final String status) { 
    final List<WebElement> radios = driver.findElements(By.name("enabled")); 

    for (WebElement radio : radios) { 
     if (radio.getText().equals(status)) { 
      radio.click(); 
     } 
    } 
} 
1

Nhận đầu vào của người dùng và gán cho một vari có thể gọi là Usrinput

List<WebElement> radiobuttons = driver.findElements(By.name("radiobuttonname")); 
    for(WebElement radiobutton: radiobuttons) { 

    if(radiobutton.getAttribute("value").equals("Usrinput")) 
     radiobutton.click(); 
}