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

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

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()

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


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")

3

Coba gunakan:

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

atau

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

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

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
}

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.


-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.


4
-1 Cara terlalu rumit dan menggunakan metode yang tidak berlaku lagi (RenderedWebElement)
Ardesco
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.