2013-02-13 10 views
7

Chcę mieć możliwość wyboru przycisku radiowego na podstawie danych wprowadzonych przez użytkownika. Ten przycisk radiowy ma wiele opcji o tej samej nazwie.Wybieranie przycisków radiowych na podstawie danych wprowadzonych przez użytkownika w Selenium Webdriver

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

Jeśli „włączone” jest przekazywana jako ciąg znaków, powinny być w stanie wybrać pierwszą opcję, która ma widocznego tekstu, włączone i czy „wyłączony” jest przekazywana jako ciąg znaków, powinny być w stanie wybierz przycisk radiowy z widocznym tekstem, Wyłączony.

Mam problem, ponieważ nazwa przycisku opcji jest taka sama. Poniższy kod nie znajduje elementu z operatorem AND dla Xpath. Czy ktoś napotkał to wcześniej i znalazł rozwiązanie?

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

Wartość "id" dwóch przycisków opcji różni się od tego, dlaczego nie można wybrać Id. Czy istnieje jakiś szczególny powód? – Manigandan

+0

id dla przycisków radiowych są generowane dynamicznie, więc nie można ich zlokalizować za pomocą identyfikatora – user1886649

Odpowiedz

9

Ta logika może być przydatna.

Dla wybierając pierwsze użycie przycisku radiowego poniżej lokalizator

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

Aby wybrać drugą opcję, która ma wyłączyć tekst

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

Dzięki za dostarczenie tej logiki, która jest krótka i działa. – user1886649

4

Może to pomoże:

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

Get użytkownik wprowadził i przyporządkował wariację w stanie o nazwie Usrinput

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

    if(radiobutton.getAttribute("value").equals("Usrinput")) 
     radiobutton.click(); 
} 
Powiązane problemy