Cara memilih / mendapatkan opsi drop down di Selenium 2

96

Saya mengubah kode selenium 1 saya menjadi selenium 2 dan tidak dapat menemukan cara mudah untuk memilih label di menu drop down atau mendapatkan nilai pilihan dari drop down. Apakah Anda tahu bagaimana melakukannya di Selenium 2?

Berikut adalah dua pernyataan yang berfungsi di Selenium 1 tetapi tidak di 2:

browser.select("//path_to_drop_down", "Value1");
browser.getSelectedValue("//path_to_drop_down");
pengguna786045
sumber
Sudahkah Anda mencoba mencarinya menggunakan Firebug? Menggunakan xpath yang dihasilkan dengan Firebug / xpather bisa membuatnya lebih mudah.
1
Pertanyaannya bukan tentang mencari atau menemukan drop-down. Ini tentang memilih label di drop-down itu. Saya dapat menemukan drop-down tetapi tidak tahu metode mana yang harus dipanggil di Selenium 2 karena select () dan getSelectedValue () atau getSelectedLabel () tidak berfungsi di Selenium 2.
user786045
Solusi di c #: stackoverflow.com/questions/5278281/…
steve cook

Jawaban:

184

Lihat bagian tentang mengisi formulir menggunakan webdriver di dokumentasi selenium dan javadoc untuk kelas Select .

Untuk memilih opsi berdasarkan label:

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

Untuk mendapatkan nilai pertama yang dipilih:

WebElement option = select.getFirstSelectedOption()
janderssn
sumber
By.xpath ("// path_to_drop_down"). Saya akan mengganti ini dengan pencari lokasi seperti By.name dan seterusnya.
Daniel
2
deselectAll akan menampilkan UnsupportedOperationException jika pemilihan tidak mendukung banyak pilihan
Tom Hartwell
4
Di C #, gunakan kelas SelectElement, jadi:SelectElement salesExecutiveDropDown = new SelectElement(webDriver.FindElement(By.Id("salesExecutiveId")));
Jeremy McGee
Fyi kode ini tidak dapat memilih dropdown sampai saya mengomentari baris ini: //select.deselectAll (); Kemudian itu mulai bekerja. Jarak tempuh Anda mungkin berbeda.
gorbysbm
1
Perhatikan bahwa deselectAllini hanya berlaku untuk banyak pilihan: selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/… .
pengguna1205577
5
driver.findElement(By.id("id_dropdown_menu")).click();
driver.findElement(By.xpath("xpath_from_seleniumIDE")).click();

semoga berhasil

penebah
sumber
4

di ruby ​​untuk terus digunakan, tambahkan ikuti:

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

dan Anda akan dapat memilih nilai:

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

Coba gunakan:

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

atau

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

Pilihan yang mirip dengan apa yang telah diposting di atas oleh janderson adalah cukup menggunakan metode .GetAttribute di selenium 2. Dengan menggunakan ini, Anda dapat mengambil item apa pun yang memiliki nilai atau label tertentu yang Anda cari. Ini dapat digunakan untuk menentukan apakah suatu elemen memiliki label, gaya, nilai, dll. Cara yang umum untuk melakukannya adalah dengan mengulang item di drop-down hingga Anda menemukan yang Anda inginkan dan memilihnya. Dalam 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
    }
}
Ben
sumber
0

Anda bisa melakukan seperti ini:

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
}
Praveen
sumber
0

Metode ini akan mengembalikan nilai yang dipilih untuk drop down,

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

Sementara itu

String textval = Selector.getFirstSelectedOption ();

element.getText ();

Akan mengembalikan semua elemen di drop down.

Jophin P John
sumber
-2

Ini adalah kode untuk memilih nilai dari drop down

Nilai untuk selectlocator adalah xpath atau nama kotak dropdown, dan untuk optionLocator akan memiliki nilai yang akan dipilih dari kotak dropdown.

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

Terima kasih,

Rekha.

Kartmcad
sumber
4
-1 Cara terlalu rumit dan menggunakan metode yang tidak berlaku lagi (RenderedWebElement)
Ardesco