Как получить все параметры в раскрывающемся списке Selenium WebDriver с помощью С#?

Я новичок в С# и Selenium WebDriver.

Я знаю, как выбрать/выбрать опцию в раскрывающемся списке, но перед этим у меня есть проблема. Поскольку раскрывающийся список динамически генерируется, я должен получить все параметры/значения из списка перед запуском каждого случая.

Кто-нибудь любезно скажет мне, как получить все значения/параметры из раскрывающегося списка. Я использую IE, и я не нашел класс, который поддерживает метод для получения значений/опций в пространстве имен Selenium.IE для С#.

Мой пример: список содержит несколько часовых поясов:

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

Это раскрывающийся список на странице IE и как получить динамически созданный список часовых поясов?

Мой код:

IWebElement elem = driver.FindElement(By.XPath("//select[@name='time_zone']"));
List<IWebElement> options = elem.FindElements(By.TagName("option"));

С# просто выдает сообщение об ошибке: не может скрывать скрытый тип "OpenQA.Selenium.IWebElement" в "System.Collections.Generic.List". Явное преобразование существует (вам не хватает роли?).

Благодарю.

Ответ 1

Вы можете попробовать использовать WebDriver.Support SelectElement, найденный в OpenQA.Selenium.Support.UI.Selected namespace для доступа к списку опций списка выбора:

IWebElement elem = driver.FindElement(By.XPath("//select[@name='time_zone']"));

SelectElement selectList = new SelectElement(elem);
IList<IWebElement> options = selectList.Options;

Затем вы можете получить доступ к каждой опции в качестве IWebElement, например:

IWebElement firstOption = options[0];
Assert.AreEqual(firstOption.GetAttribute("value"), "-09:00");

Ответ 2

Select select = new Select(driver.findElement(By.id("searchDropdownBox")));

select.getOptions();//will get all options as List<WebElement>

Ответ 3

Убедитесь, что вы ссылаетесь на сборку WebDriver.Support.dll, чтобы получить доступ к вспомогательному классу раскрывающегося списка OpenQA.Selenium.Support.UI.SelectElement. См. Эту тему для получения дополнительной информации.

Изменение: на этом снимке экрана вы можете видеть, что я могу получить параметры просто отлично. Открывается ли IE при создании нового InternetExplorerDriver? Screenshot

Ответ 4

Вот код на Java, чтобы получить все варианты в выпадающем списке.

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);
    }

Надеюсь, это кому-то поможет.

Ответ 5

Вы можете использовать selenium.Support для использования класса SelectElement, этот класс имеет свойство "Параметры", которое вы ищете, я создал метод расширения, чтобы преобразовать ваш веб-элемент в элемент выбора

public static SelectElement AsDropDown(this IWebElement webElement)
{
    return new SelectElement(webElement);
}

то вы можете использовать его так

var elem = driver.FindElement(By.XPath("//select[@name='time_zone']"));
var options = elem.AsDropDown().Options

Ответ 6

Используйте IList<IWebElement> вместо List<IWebElement>.

Например:

IList<IWebElement> options = elem.FindElements(By.TagName("option"));
foreach (IWebElement option in options)
{
    Console.WriteLine(option.Text);
}

Ответ 7

Кажется, это отлитое исключение. Можете ли вы попробовать преобразовать свой результат в список, т.е. elem.findElements(xx).toList?

Ответ 8

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); 
 }

Ответ 9

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"));

Ответ 10

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

        }

Ответ 11

Чтобы получить все параметры в раскрывающемся списке Selenium WebDriver С#:

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);
}