2010-11-24 13 views
3

J'ai une liste déroulante à partir de laquelle je ne peux pas sélectionner un élément. Je peux parcourir tous les éléments de la liste et trouver celui que je veux mais le clic() ne sélectionne pas l'élément.Impossible de sélectionner l'élément dans la liste déroulante

Voici le code. Quelqu'un peut-il aider?

driver.findElement(By.id("components-multi-select")).findElement(By.className("icon")).click(); 
driver.findElement(By.id("components-suggestions")); 

List<WebElement> componentList = driver.findElements(By.className("aui-list-item")); 
for (WebElement component : componentList){ 
    System.out.println(component.getText()); 
    if (component.getText().contains(newComponent)){ 
     component.click(); 
     break; 
    } 
    else{ 
     System.out.println("not equal"); 
    } 

Voici le code html de la liste déroulante des composants.

<div class="field-group aui-field-componentspicker frother-control-renderer" > 
<label for="components">Component/s</label> 

<div class="ajs-multi-select-placeholder textarea long-field"></div> 

<select class="select hidden " id="components" multiple="multiple" name="components" size="5" data-remove-null-options="true"> 
    <option value="-1"> 
    Unknown 
    </option> 
    <option selected="selected" title="Component 1 - A test component" value="10240"> 
    Component 1 
    </option> 
    <option title="Component 2 - " value="10242"> 
    Component 2 
    </option> 
    <option title="Lee 2 " value="10371"> 
    Lee 2 
    </option> 
    <option title="Roy " value="10370"> 
    Roy 
    </option> 
    <option title="Test Documentation " value="10241"> 
    Test Documentation 
    </option> 
</select> 
+0

Pouvez-vous poster une partie de html qui contient la liste? Il semble que la liste est une sorte de widget 3d-party –

Répondre

0

Vous devriez trouver votre élément select d'abord, puis itérer à travers son option s

WebElement selectElement = driver.findElement(By.id("components")); 

List<WebElement> componentList = selectElement.findElements(By.tagName("option")); 
for (WebElement component : componentList){ 
    System.out.println(component.getText()); 
    if (component.getText().contains(newComponent)){ 
     component.click(); 
     break; 
    } 
    else{ 
     System.out.println("not equal"); 
    } 
} 
+0

J'ai essayé votre code et maintenant quand je parviens à component.click(), j'obtiens l'erreur que l'élément n'est pas visible. – John

+0

L'utilisation du code HTML que vous avez fourni mon code fonctionne correctement. Pouvez-vous poster le CSS? Est-ce le widget développé par votre organisation ou utilisez-vous un tiers? (Dojo, YUI, etc) –

1

Je vous imagine avez vu cela maintenant, mais le tutoriel montre un exemple de la sélection des options comme si :

WebElement select = driver.findElement(By.xpath("//select")); 
List<WebElement> allOptions = select.findElements(By.tagName("option")); 
for (WebElement option : allOptions) { 
    System.out.println(String.format("Value is: %s", option.getValue())); 
    option.setSelected(); 
} 

Ainsi, au lieu d'appeler clic, vous devez appeler la méthode setSelected

Aussi, vous pouvez utiliser

Select select = new Select(driver.findElement(By.xpath("//select"))); 
select.deselectAll(); 
select.selectByVisibleText("Edam"); 

Plus d'infos ici: http://seleniumhq.org/docs/09_webdriver.html

Je suis encore confus par votre question parce que vous avez publié une html qui a une liste d'options, mais dans votre code lookup un élément par classname qui n'existe pas dans votre html .. peut-être que vous essayez juste de cliquer sur une sorte de menu déroulant et non une option de boîte de sélection ..

+0

Il s'agit d'une liste déroulante et si j'utilise setSelected(), j'obtiens l'erreur, Vous ne pouvez pas sélectionner un élément non sélectionnable. – John

+0

Si vous le pouvez, essayez de créer une page web simple qui est une page html avec une selectbox et voyez si vous pouvez reproduire le comportement là-bas .. Si oui, écrivez le problème comme un bug pour le sélénium/les gens webdriver et voir si ils peuvent l'obtenir réparé. Je n'utilise pas le client java mais ça marche bien pour moi avec ruby. –

3
Select comboBox = new Select(webDriver 
     .findElementById(comboBoxId)); 
comboBox.selectByVisibleText(optionText); 
-1

Si vous essayez de déclencher un événement pour onselect s Dans un certain but, vous pouvez utiliser sendkeys ("\ t). c'est-à-dire pour simuler une tabulation hors de l'élément.