Je suis nouveau sur C # et Selenium WebDriver.
Je sais comment sélectionner/cliquer sur une option dans une liste déroulante, mais j'ai un problème avant cela. Comme la liste déroulante est générée dynamiquement, je dois obtenir toutes les options/valeurs de la liste avant d'exécuter chaque cas.
Est-ce que quelqu'un me dit gentiment comment obtenir toutes les valeurs/options à partir d'une liste déroulante? J'utilise IE et je n'ai trouvé aucune classe prenant en charge la méthode permettant d'obtenir des valeurs/options dans l'espace de noms Selenium.IE pour C #.
Mon exemple: Une liste contient plusieurs fuseaux horaires:
<TD>
<select name = "time_zone">
<option value "-09:00"><script>timezone.Alaska</script></option>
<option value "+00:00"><script>timezone.England</script></option>
<option value "+02:00"><script>timezone.Greece</script></option>
<option value "+05:30"><script>timezone.India</script></option>
</select>
<TD>
Ceci est une liste déroulante dans une page IE et comment obtenir la liste de fuseaux horaires générée dynamiquement?
Mon code:
IWebElement elem = driver.FindElement(By.XPath("//select[@name='time_zone']"));
List<IWebElement> options = elem.FindElements(By.TagName("option"));
C # affiche simplement une erreur: Impossible de dissimuler implicitement le type 'OpenQA.Selenium.IWebElement' en 'System.Collections.Generic.List'. Une conversion explicite existe (manque-t-il un casting?).
merci.
Vous pouvez essayer d'utiliser WebDriver.Support SelectElement situé dans OpenQA.Selenium.Support.UI.Selected namespace pour accéder à la liste d'options d'une liste de sélection:
IWebElement elem = driver.FindElement(By.XPath("//select[@name='time_zone']"));
SelectElement selectList = new SelectElement(elem);
IList<IWebElement> options = selectList.Options;
Vous pouvez ensuite accéder à chaque option en tant qu'IWebElement, par exemple:
IWebElement firstOption = options[0];
Assert.AreEqual(firstOption.GetAttribute("value"), "-09:00");
Select select = new Select(driver.findElement(By.id("searchDropdownBox")));
select.getOptions();//will get all options as List<WebElement>
Assurez-vous de référencer l'assembly WebDriver.Support.dll pour accéder à la classe d'assistance déroulante OpenQA.Selenium.Support.UI.SelectElement. Voir ce fil de discussion pour plus de détails.
Edit: Dans cette capture d'écran, vous pouvez voir que je peux très bien avoir les options. IE s'ouvre-t-il lorsque vous créez un nouveau InternetExplorerDriver?
Voici le code en Java pour obtenir toutes les options dans la liste déroulante.
WebElement sel = myD.findElement(By.name("dropdown_name"));
List<WebElement> lists = sel.findElements(By.tagName("option"));
for(WebElement element: lists)
{
String var2 = tdElement.getText();
System.out.println(var2);
}
J'espère que cela pourra aider quelqu'un.
Vous pouvez utiliser Selenium.Support
pour utiliser la classe SelectElement
, cette classe ayant la propriété "Options" correspondant à ce que vous recherchez, j'ai créé une méthode d'extension pour convertir votre élément Web en élément select.
public static SelectElement AsDropDown(this IWebElement webElement)
{
return new SelectElement(webElement);
}
alors vous pourriez l'utiliser comme ça
var elem = driver.FindElement(By.XPath("//select[@name='time_zone']"));
var options = elem.AsDropDown().Options
Utilisez IList<IWebElement>
au lieu de List<IWebElement>
.
Par exemple:
IList<IWebElement> options = elem.FindElements(By.TagName("option"));
foreach (IWebElement option in options)
{
Console.WriteLine(option.Text);
}
To get all the dropdown values you can use List.
List<string> lstDropDownValues = new List<string>();
int iValuescount = driver.FindElement(By.Xpath("\html\....\select\option"))
for(int ivalue = 1;ivalue<=iValuescount;ivalue++)
{
string strValue = driver.FindElement(By.Xpath("\html\....\select\option["+ ivalue +"]"));
lstDropDownValues.Add(strValue);
}
WebElement drop_down =driver.findElement(By.id("Category"));
Select se = new Select(drop_down);
for(int i=0 ;i<se.getOptions().size(); i++)
System.out.println(se.getOptions().get(i).getAttribute("value"));
WebElement element = driver.findElement(By.id("inst_state"));
Select s = new Select(element);
List <WebElement> elementcount = s.getOptions();
System.out.println(elementcount.size());
for(int i=0 ;i<elementcount.size();i++)
{
String value = elementcount.get(i).getText();
System.out.println(value);
}
Pour obtenir toutes les options dans une liste déroulante de Selenium WebDriver C #:
SelectElement TimeZoneSelect = new SelectElement(driver.FindElement(By.Name("time_zone")));
IList<IWebElement> ElementCount = TimeZoneSelect.Options;
int ItemSize = ElementCount.Count;
for (int i = 0; i < ItemSize; i++)
{
String ItemValue = ElementCount.ElementAt(i).Text;
Console.WriteLine(ItemValue);
}
Cela semble être une exception de casting. Pouvez-vous essayer de convertir votre résultat en une liste elem.findElements(xx).toList
?