наверное нет, когда-то тоже пытался найти, одной строкой, у меня не вышло…
Вам все равно придется запихивать в List
и уже по нему ходить циклом, чтобы вывести каждое значение или количество значений.
В селенид, кстати очень интересная штука есть, если вы сделаете список в таком виде:
<ul>
<li>текст 1</li>
<li>текст 2</li>
</ul>
то вы не сможете воспользоваться методами select
:
тест:
@Test
public void testDropDownSelenide1() {
open("http://automated-testing.info/");
$(By.id("search-button")).click();
$(By.id("search-term")).sendKeys("selenide");
String foo = $(By.xpath("//div[@class='results']/ul/ul")).getSelectedText();
System.out.println(foo);
}
напишет ошибочку:
Caused by: support.ui.UnexpectedTagNameException: Element should have been "select" but was "ul"
Если же у вас будет список сделан, через селект:
<select>
<option>Mustard</option>
<option>Ketchup</option>
<option>Relish</option>
</select>
тест:
@Test
public void testDropDownSelenide2() {
open("https://silviomoreto.github.io/bootstrap-select/examples/");
SelenideElement foo1 = $(By.xpath("//div[@class='bs-docs-example']/select")).getSelectedOption();
String foo2 = $(By.xpath("//div[@class='bs-docs-example']/select")).getSelectedText();
String foo3 = $(By.xpath("//div[@class='bs-docs-example']/select")).getSelectedValue();
String foo4 = $(By.xpath("//div[@class='bs-docs-example']/select")).getText();
String foo5 = $(By.xpath("//div[@class='bs-docs-example']/select")).getValue();
String foo6 = $(By.xpath("//div[@class='bs-docs-example']/select")).text();
String foo7 = $(By.xpath("//div[@class='bs-docs-example']/select")).val();
System.out.printf("getSelectedOption: %s %n", foo1.toString());
System.out.printf("getSelectedText: %s %n", foo2);
System.out.printf("getSelectedValue: %s %n", foo3);
System.out.printf("getText: %s %n", foo4);
System.out.printf("getValue: %s %n", foo5);
System.out.printf("text: %s %n", foo6);
System.out.printf("val: %s %n", foo7);
}
то нет возможности вытащит все элементы выпадающего списка одной строкой, выведет:
getSelectedOption: <option value="Mustard" selected:true>Mustard</option>
getSelectedText: Mustard
getSelectedValue: Mustard
getText: Mustard
getValue: Mustard
text: Mustard
val: Mustard
если же через список:
<ul class="dropdown-menu inner">
<li class="selected">Mustard</li>
<li>Ketchup</li>
<li>Relish</li>
</ul>
тест:
@Test
public void testDropDownSelenide3() {
open("https://silviomoreto.github.io/bootstrap-select/examples/");
$(By.xpath("//div[@class='btn-group bootstrap-select']")).click();
//SelenideElement foo1 = $(By.xpath("//div[@class='btn-group bootstrap-select open']/div/ul")).getSelectedOption();
//String foo2 = $(By.xpath("//div[@class='btn-group bootstrap-select open']/div/ul")).getSelectedText();
//String foo3 = $(By.xpath("//div[@class='btn-group bootstrap-select open']/div/ul")).getSelectedValue();
String foo4 = $(By.xpath("//div[@class='btn-group bootstrap-select open']/div/ul")).getText();
//String foo5 = $(By.xpath("//div[@class='btn-group bootstrap-select open']/div/ul")).getValue();
String foo6 = $(By.xpath("//div[@class='btn-group bootstrap-select open']/div/ul")).text();
//String foo7 = $(By.xpath("//div[@class='btn-group bootstrap-select open']/div/ul")).val();
//System.out.printf("getSelectedOption: %s %n", foo1.toString());
//System.out.printf("getSelectedText: %s %n", foo2);
//System.out.printf("getSelectedValue: %s %n", foo3);
System.out.printf("getText: %s %n", foo4);
//System.out.printf("getValue: %s %n", foo5);
System.out.printf("text: %s %n", foo6);
//System.out.printf("val: %s %n", foo7);
}
результат:
getText: Mustard
Ketchup
Relish
text: Mustard
Ketchup
Relish
P.S. в последнее время заметил, что очень многие сейчас делают выпадашки через списки: ul -> li + JS
, мало кто делает селектом… Поэтому было бы здорово наверное, если бы в селениде сделали метод, который вернул бы колмчество таких записей или вывел все записи типом List
…
Хотя может это и избыточно