Cách chọn / lấy tùy chọn thả xuống trong Selenium 2


96

Tôi đang chuyển đổi mã selen 1 của mình thành selen 2 và không thể tìm thấy bất kỳ cách nào dễ dàng để chọn nhãn trong menu thả xuống hoặc nhận giá trị đã chọn của menu thả xuống. Bạn có biết cách làm điều đó trong Selenium 2 không?

Đây là hai câu lệnh hoạt động trong Selenium 1 nhưng không hoạt động trong Selenium 2:

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

Bạn đã thử xác định vị trí nó bằng Firebug chưa? Sử dụng xpath được tạo bằng Firebug / xpather có thể giúp bạn dễ dàng hơn.

1
Câu hỏi không phải là xác định vị trí hoặc tìm danh sách thả xuống. Đó là về việc chọn một nhãn trong trình đơn thả xuống đó. Tôi có thể xác định vị trí thả xuống nhưng không biết phương pháp nào để gọi trong Selenium 2 kể từ khi chọn () và getSelectedValue () hoặc getSelectedLabel () không làm việc trong Selenium 2.
user786045

Câu trả lời:


184

Hãy xem phần về cách điền biểu mẫu bằng cách sử dụng webdriver trong tài liệu selen và javadoc cho lớp Chọn .

Để chọn một tùy chọn dựa trên nhãn:

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

Để nhận giá trị được chọn đầu tiên:

WebElement option = select.getFirstSelectedOption()

By.xpath ("// path_to_drop_down"). Tôi sẽ thay thế điều này bằng một định vị như By.name, v.v.
Daniel

2
deselectAll sẽ ném một UnsupportedOperationException nếu chọn không hỗ trợ nhiều lựa chọn
Tom Hartwell

4
Trong C #, sử dụng lớp SelectElement, vì vậy:SelectElement salesExecutiveDropDown = new SelectElement(webDriver.FindElement(By.Id("salesExecutiveId")));
Jeremy McGee

Fyi mã này không thể chọn một danh sách thả xuống cho đến khi tôi nhận xét ra dòng này: //select.deselectAll (); Sau đó, nó bắt đầu hoạt động. Số dặm của bạn có thể thay đổi.
gorbysbm

1
Lưu ý rằng điều đó deselectAllchỉ hợp lệ cho nhiều lựa chọ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();

chúc may mắn


4

trong ruby ​​để liên tục sử dụng, thêm theo sau:

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

và bạn sẽ có thể chọn giá trị:

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

3

Hãy thử sử dụng:

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

hoặc là

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

0

Một tùy chọn tương tự như những gì được đăng ở trên bởi janderson sẽ rất đơn giản là sử dụng phương thức .GetAttribute trong selenium 2. Sử dụng phương thức này, bạn có thể lấy bất kỳ mục nào có giá trị hoặc nhãn cụ thể mà bạn đang tìm kiếm. Điều này có thể được sử dụng để xác định xem một phần tử có nhãn, kiểu, giá trị, v.v. Một cách phổ biến để làm điều này là lặp qua các mục trong menu thả xuống cho đến khi bạn tìm thấy phần tử bạn muốn và chọn nó. Trong 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

bạn có thể làm như thế này:

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

Phương thức này sẽ trả về giá trị đã chọn cho menu thả xuống,

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

Trong khi đó

String textval = Selector.getFirstSelectedOption ();

element.getText ();

Sẽ trả về tất cả các phần tử trong menu thả xuống.


-2

Đây là mã để chọn giá trị từ trình đơn thả xuống

Giá trị cho selectlocator sẽ là xpath hoặc tên của hộp thả xuống và cho optionLocator sẽ có giá trị được chọn từ hộp thả xuống.

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

Cảm ơn,

Rekha.


4
-1 Way overcomplicated và sử dụng phương pháp phản đối (RenderedWebElement)
Ardesco
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.