Je suis en train de convertir mon code Selenium 1 en Selenium 2 et je ne trouve aucun moyen simple de sélectionner une étiquette dans un menu déroulant ou d'obtenir la valeur sélectionnée d'un menu déroulant. Savez-vous comment faire cela dans Selenium 2?
Voici deux déclarations qui fonctionnent dans le sélénium 1 mais pas dans le 2:
browser.select("//path_to_drop_down", "Value1");
browser.getSelectedValue("//path_to_drop_down");
Consultez la section sur remplir des formulaires en utilisant webdriver dans la documentation Selenium et le javadoc pour la classe Select .
Pour sélectionner une option basée sur l'étiquette:
Select select = new Select(driver.findElement(By.xpath("//path_to_drop_down")));
select.deselectAll();
select.selectByVisibleText("Value1");
Pour obtenir la première valeur sélectionnée:
WebElement option = select.getFirstSelectedOption()
driver.findElement(By.id("id_dropdown_menu")).click();
driver.findElement(By.xpath("xpath_from_seleniumIDE")).click();
bonne chance
en Ruby pour une utilisation constante, ajouter les éléments suivants:
module Selenium
module WebDriver
class Element
def select(value)
self.find_elements(:tag_name => "option").find do |option|
if option.text == value
option.click
return
end
end
end
end
end
et vous pourrez choisir la valeur:
browser.find_element(:xpath, ".//xpath").select("Value")
Essayez d'utiliser:
Selenium.select("id=items","label=engineering")
ou
Selenium.select("id=items","index=3")
Une option similaire à ce qui a été posté ci-dessus par janderson serait donc simple: utilisez la méthode .GetAttribute dans Selenium 2. Grâce à cela, vous pouvez récupérer tout élément ayant une valeur ou une étiquette spécifique que vous recherchez. Cela peut être utilisé pour déterminer si un élément a une étiquette, un style, une valeur, etc. Une méthode courante consiste à parcourir les éléments du menu déroulant jusqu'à ce que vous trouviez celui que vous souhaitez et le sélectionniez. En C #
int items = driver.FindElement(By.XPath("//path_to_drop_Down")).Count();
for(int i = 1; i <= items; i++)
{
string value = driver.FindElement(By.XPath("//path_to_drop_Down/option["+i+"]")).GetAttribute("Value1");
if(value.Conatains("Label_I_am_Looking_for"))
{
driver.FindElement(By.XPath("//path_to_drop_Down/option["+i+"]")).Click();
//Clicked on the index of the that has your label / value
}
}
Cette méthode renverra la valeur sélectionnée pour la liste déroulante,
public static String getSelected_visibleText(WebDriver driver, String elementType, String value)
{
WebElement element = Webelement_Finder.webElement_Finder(driver, elementType, value);
Select Selector = new Select(element);
Selector.getFirstSelectedOption();
String textval=Selector.getFirstSelectedOption().getText();
return textval;
}
Pendant ce temps
String textval = Selector.getFirstSelectedOption ();
element.getText ();
Renverra tous les éléments dans la liste déroulante.
vous pouvez faire comme ça:
public void selectDropDownValue(String ValueToSelect)
{
webelement findDropDownValue=driver.findElements(By.id("id1")) //this will find that dropdown
wait.until(ExpectedConditions.visibilityOf(findDropDownValue)); // wait till that dropdown appear
super.highlightElement(findDropDownValue); // highlight that dropdown
new Select(findDropDownValue).selectByValue(ValueToSelect); //select that option which u had passed as argument
}