Как выбрать / получить выпадающий вариант в Selenium 2
Я конвертирую свой код selenium 1 в selenium 2 и не могу найти простой способ выбрать метку в выпадающем меню или получить выбранное значение выпадающего списка. Вы знаете, как это сделать в Selenium 2?
вот два утверждения, которые работают в Selenium 1, но не в 2:
browser.select("//path_to_drop_down", "Value1");
browser.getSelectedValue("//path_to_drop_down");
8 ответов:
взгляните на раздел о заполнение формы использование webdriver в документации selenium и javadoc для выберите класса.
чтобы выбрать опцию на основе метки:
Select select = new Select(driver.findElement(By.xpath("//path_to_drop_down"))); select.deselectAll(); select.selectByVisibleText("Value1");чтобы получить первое выбранное значение:
WebElement option = select.getFirstSelectedOption()
driver.findElement(By.id("id_dropdown_menu")).click(); driver.findElement(By.xpath("xpath_from_seleniumIDE")).click();удачи
в ruby для постоянного использования добавьте следующее:
module Selenium module WebDriver class Element def select(value) self.find_elements(:tag_name => "option").find do |option| if option.text == value option.click return end end end end endи вы сможете выбрать значение:
browser.find_element(:xpath, ".//xpath").select("Value")
попробуйте использовать:
selenium.select("id=items","label=engineering")или
selenium.select("id=items","index=3")
похожий вариант, что был выложен выше, janderson будет так просто использовать .Метод GetAttribute в selenium 2. Используя это, вы можете захватить любой элемент, который имеет определенное значение или метку, которую вы ищете. Это можно использовать для определения того, имеет ли элемент метку, стиль, значение и т. д. Обычный способ сделать это-перебирать элементы в раскрывающемся списке, пока не найдете тот, который вы хотите, и не выберите его. В C#
int items = driver.FindElement(By.XPath("//path_to_drop_Down")).Count(); for(int i = 1; i <= items; i++) { string value = driver.FindElement(By.XPath("//path_to_drop_Down/option["+i+"]")).GetAttribute("Value1"); if(value.Conatains("Label_I_am_Looking_for")) { driver.FindElement(By.XPath("//path_to_drop_Down/option["+i+"]")).Click(); //Clicked on the index of the that has your label / value } }
можно сделать так :
public void selectDropDownValue(String ValueToSelect) { webelement findDropDownValue=driver.findElements(By.id("id1")) //this will find that dropdown wait.until(ExpectedConditions.visibilityOf(findDropDownValue)); // wait till that dropdown appear super.highlightElement(findDropDownValue); // highlight that dropdown new Select(findDropDownValue).selectByValue(ValueToSelect); //select that option which u had passed as argument }
этот метод вернет выбранное значение для выпадающего списка,
public static String getSelected_visibleText(WebDriver driver, String elementType, String value) { WebElement element = Webelement_Finder.webElement_Finder(driver, elementType, value); Select Selector = new Select(element); Selector.getFirstSelectedOption(); String textval=Selector.getFirstSelectedOption().getText(); return textval; }между тем
строка textval=селектор.getFirstSelectedOption ();
элемент.getText ();
возвращает все элементы в выпадающем списке.
это код для выбора значения из выпадающего списка
значение для selectlocator будет xpath или имя выпадающего списка, а для optionLocator будет иметь значение, которое будет выбрано из выпадающего списка.
public static boolean select(final String selectLocator, final String optionLocator) { try { element(selectLocator).clear(); element(selectLocator).sendKeys(Keys.PAGE_UP); for (int k = 0; k <= new Select(element(selectLocator)) .getOptions().size() - 1; k++) { combo1.add(element(selectLocator).getValue()); element(selectLocator).sendKeys(Keys.ARROW_DOWN); } if (combo1.contains(optionLocator)) { element(selectLocator).clear(); new Select(element(selectLocator)).selectByValue(optionLocator); combocheck = element(selectLocator).getValue(); combo = ""; return true; } else { element(selectLocator).clear(); combo = "The Value " + optionLocator + " Does Not Exist In The Combobox"; return false; } } catch (Exception e) { e.printStackTrace(); errorcontrol.add(e.getMessage()); return false; } } private static RenderedWebElement element(final String locator) { try { return (RenderedWebElement) drivers.findElement(by(locator)); } catch (Exception e) { errorcontrol.add(e.getMessage()); return (RenderedWebElement) drivers.findElement(by(locator)); } }спасибо,
Рекха.
Comments