Выпадающий список Webdriver не может выбрать / выбрать - PullRequest
2 голосов
/ 25 июля 2011

Я не могу выбрать раскрывающийся список HTML с помощью моего метода Webdriver. Что не так в моем коде.? Не могли бы вы дать мне несколько советов.

 <select>
<option value="32">32</option>

<option value="34">34</option>

<option value="36">36</option>


</select>

public static List<WebElement> chooseSize(Integer size){
WebElement select = findElement(By.xpath(DropDown_Article_Size_XPATH_ID));
List<WebElement> options = select.findElements(By.tagName("option"));
for(WebElement option : options){
    if(option.getText().equals(size)){
        option.isSelected(); // or .click()?
       }
}
return options;
}

Ответы [ 8 ]

3 голосов
/ 26 июля 2011

Существует класс поддержки, который может помочь вам в этом в WebDriver: "org.openqa.selenium.support.ui.Select".

Вот как вы его используете:

// First, get the WebElement for the select tag
WebElement selectElement = driver.findElement(By.xpath(DropDown_Article_Size_XPATH_ID));

// Then instantiate the Select class with that WebElement
Select select = new Select(selectElement);

// Get a list of the options
List<WebElement> options = select.getOptions();

// For each option in the list, verify if it's the one you want and then click it
for (WebElement we : options) {
    if (we.getText().equals(valueToSelect)) {
        we.click();
        break;
    }
}
2 голосов
/ 25 января 2012
Select select = new Select(driver.findElement(By.xpath("Xpath_of_Select_Element")));
select.selectByVisibleText("Option_to_Select");

Это самый простой способ выбрать опцию из выпадающего списка

1 голос
/ 14 февраля 2013

Битовая модификация работает для меня, большое спасибо за такой простой код, который делает свою работу.

Select select = new Select(driver.findElement(By.name("Status_operator")));
select.selectByValue("=");
1 голос
/ 25 июля 2011

Для таких случаев я использую выражения xpath.Вы сэкономите много кода!

Для того, что вы просите, это должно сделать (я предполагаю, что ваш xpath правильно нацеливается на соответствующий select):

// Click select first:
// (See http://code.google.com/p/selenium/issues/detail?id=2112)
findElement(By.xpath(DropDown_Article_Size_XPATH_ID)).click();

// Then click option:
String xpathOption = String.format("%s/option[text()='%d']",
    DropDown_Article_Size_ID, size);
log.debug("Selecting option by text '{}' using xpath '{}'", size, xpathOption);
findElement(By.xpath(xpathOption)).click();

Кстати, я не понимаю, почему ваш chooseSize возвращает список всех опций.Вам, вероятно, следует переименовать метод во что-то осмысленное (например, getOptionsBySize, если вы этого хотите).

0 голосов
/ 30 сентября 2012

вы можете сделать

WebElement selectElement = driver.findElement(By.xpath(DropDown_Article_Size_XPATH_ID));
selectElement.sendKeys("34") 

для выбора 34

это так просто. Sendkeys - это очень полезный метод в веб-драйвере, имеющий разные реализации для объектов разного типа, т. Е. Для текстового поля Sendkeys будет вводить текст, а для элемента select - элемент select.

Я даже читал, что для поля загрузки файла вы можете использовать sendkeys для ввода пути к файлу.

ура

Shrikant

0 голосов
/ 30 июля 2011

Боюсь, что есть проблема с ChromeDriver и Select. Протестированные на Chrome для MacOSX, .click () и .isSelected () не работают. Тот же код в FireFox, работает как положено. Есть ли что-то различное в обоих браузерах?

List<WebElement> opciones = select.getOptions();

for(WebElement el : opciones){
  System.out.println("Elemento disponible: ["+el.getAttribute("value")+"]["+el.getText()+"]");

  //Select actual option            
  el.click();
  if(el.isSelected())
    System.out.println("Selected: ["+el.getAttribute("value")+"]["+el.getText()+"]");
}
0 голосов
/ 25 июля 2011

Если вы используете Selenium2, вы должны использовать option.click().

0 голосов
/ 25 июля 2011

Вы пробовали setSelected()? isSelected() является геттером, поэтому он ничего не изменит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...