Selenium 2'de açılır menü seçeneği nasıl seçilir / alınır


96

Selenyum 1 kodumu selenyum 2'ye dönüştürüyorum ve bir açılır menüden bir etiket seçmenin veya bir açılır listenin seçilen değerini almanın kolay bir yolunu bulamıyorum. Selenium 2'de bunu nasıl yapacağınızı biliyor musunuz?

Selenium 1'de çalışan ancak 2'de çalışmayan iki ifade şunlardır:

browser.select("//path_to_drop_down", "Value1");
browser.getSelectedValue("//path_to_drop_down");

Firebug kullanarak bulmayı denediniz mi? Firebug / xpather ile oluşturulan xpath'i kullanmak bunu kolaylaştırabilir.

1
Soru, açılır menüyü bulmak veya bulmakla ilgili değil. Bu, o açılır menüden bir etiket seçmekle ilgili. Açılır listeyi bulabilirim, ancak selenium 2'de hangi yöntemi çağıracağımı bilmiyorum çünkü select () ve getSelectedValue () veya getSelectedLabel () Selenium 2'de çalışmıyor.
user786045

Yanıtlar:


184

Selenium belgelerinde webdriver kullanarak formları doldurma hakkındaki bölüme ve Select sınıfı için javadoc'a bir göz atın .

Etikete göre bir seçenek seçmek için:

Select select = new Select(driver.findElement(By.xpath("//path_to_drop_down")));
select.deselectAll();
select.selectByVisibleText("Value1");

İlk seçilen değeri almak için:

WebElement option = select.getFirstSelectedOption()

By.xpath ("// path_to_drop_down"). Bunu By.name gibi bir bulucu ile değiştirirdim.
Daniel

2
deselectAll, seçim birden çok seçimi desteklemiyorsa UnsupportedOperationException oluşturur
Tom Hartwell

4
C # 'da SelectElement sınıfını kullanın, yani:SelectElement salesExecutiveDropDown = new SelectElement(webDriver.FindElement(By.Id("salesExecutiveId")));
Jeremy McGee

Bilginize, ben bu satırı yorumlayana kadar bu kod bir açılır menü seçemedi: //select.deselectAll (); Sonra çalışmaya başladı. Kilometreniz değişebilir.
gorbysbm

1
Bunun deselectAllyalnızca çoklu seçim için geçerli olduğunu unutmayın : selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/… .
user1205577

5
driver.findElement(By.id("id_dropdown_menu")).click();
driver.findElement(By.xpath("xpath_from_seleniumIDE")).click();

iyi şanslar


4

Ruby'de sürekli kullanmak için aşağıdakileri ekleyin:

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

ve değer seçebileceksiniz:

browser.find_element(:xpath, ".//xpath").select("Value")

3

Şunları kullanmayı deneyin:

selenium.select("id=items","label=engineering")

veya

selenium.select("id=items","index=3")

0

Yukarıda janderson tarafından yazılana benzer bir seçenek, selenium 2'deki .GetAttribute yöntemini kullanmaktır. Bunu kullanarak, aradığınız belirli bir değere veya etikete sahip herhangi bir öğeyi alabilirsiniz. Bu, bir öğenin bir etiketi, stili, değeri, vb. Olup olmadığını belirlemek için kullanılabilir. Bunu yapmanın yaygın bir yolu, istediğiniz öğeyi bulana ve onu seçene kadar açılır menüdeki öğeler arasında döngü yapmaktır. 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
    }
}

0

bunu beğenebilirsin:

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
}

0

Bu yöntem, açılır menü için seçilen değeri döndürür,

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

o esnada

String textval = Selector.getFirstSelectedOption ();

element.getText ();

Açılır menüdeki tüm öğeleri döndürür.


-2

Bu, açılır menüden değer seçilecek koddur

Selectlocator değeri xpath veya açılır kutunun adı olacaktır ve optionLocator için açılır kutudan seçilecek değer olacaktır.

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

Teşekkürler,

Rekha.


4
-1 Yol aşırı karmaşık ve kullanımdan kaldırılmış yöntemler (RenderedWebElement)
Ardesco
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.