2016-11-08 5 views
1

Я хочу выбрать выпадающее значение. Проблема заключается в том, что выпадающий список выведен, он написан как элементы списка. Код фрагмента следующим образом:Как выбрать элемент списка из раскрывающегося списка по его значению с помощью Selenium Webdriver C#

<div class="rcbScroll" style="width: 100%; height: 184px; overflow: auto;"> 
<ul class="rcbList" style="width: 100%"> 
    <li class="rcbItem">Option 1</li> 
    <li class="rcbItem">Option 2</li> 
    <li class="rcbItem">Option 3</li> 
</ul> 

Как выбрать «Вариант 2» в качестве выбранного значения в раскрывающемся списке?

+0

Является ли это 'ul' стилизованного раскрывающегося списка? Или вы хотели использовать фактический элемент 'select'? –

+0

Это элемент 'ul', который выглядит как выпадающий. – Annie

ответ

1

с помощью CSS селекторы в Selenium:

вы можете получить значение п-го ребенка, находя его с CSS Selector.

// first child: will return "Option 1" 
driver.findElement(By.cssSelector("ul.rcbList > li:nth-child(1)")); 

// second child: will return "Option 2" 
driver.findElement(By.cssSelector("ul.rcbList > li:nth-child(2)")); 

// nth child: will return "Option n" 
driver.findElement(By.cssSelector("ul.rcbList > li:nth-child(n)")); 

В случае, когда <li> элементы являются динамическими, а затем получить подсчета и цикл снова и получить все значения.

var el_count = driver.FindElements(By.CssSelector("ul.rcbList")); 

for(int index=0; index < el_count.count(); index++){ 
    // 0 (zero) is the first element in <ul> DOM Array 
    driver.findElement(By.cssSelector("ul > li:nth-child(index)")); 
} 

Поиск элемента по тексту (значение)

Легче всего было бы найти по XPATH и класса

var title = driver.FindElement(By.XPath("./div[@class='aCont']/div/a/span[text() = 'TextToFind']")); 
// now title contains text, title = "text to be find" 

для более -Example code

+0

Спасибо. Первого варианта было достаточно для меня. – Annie

+0

С небольшим изменением. driver.FindElement (By.CssSelector ("ul.rcbList> li: nth-child (1)")). Click(); (где мне нужно было указать имя класса 'ul'element) – Annie

+0

Есть ли синтаксис, который я мог бы использовать, чтобы выбрать элемент списка по его значению? что-то вдоль строк, что элемент списка содержит «Вариант 2» – Annie

0

попробовать (только если ul лечится как выпадающее меню):

SelectElement selectElement = new SelectElement(driver.FindElement(By.cssSelector(".rcbList"))); 
selectElement.SelectByText("Option 2"); 

Ссылка:

https://stackoverflow.com/a/31072586/2575259

+0

Извините. Не работал для этого сценария. 'SelectElement' может использоваться только для HTML-элемента select-option, а не для неупорядоченных элементов списка. – Annie

Смежные вопросы