วิธีเลือก / รับตัวเลือกแบบเลื่อนลงในซีลีเนียม 2


96

ฉันกำลังแปลงรหัสซีลีเนียม 1 เป็นซีลีเนียม 2 และไม่พบวิธีง่ายๆในการเลือกป้ายกำกับในเมนูแบบเลื่อนลงหรือรับค่าที่เลือกจากรายการแบบเลื่อนลง คุณรู้วิธีทำในซีลีเนียม 2 หรือไม่?

นี่คือสองคำสั่งที่ใช้ได้กับ Selenium 1 แต่ไม่ใช่ใน 2:

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

คุณพยายามค้นหาโดยใช้ Firebug หรือไม่? การใช้ xpath ที่สร้างด้วย Firebug / xpather สามารถทำให้ง่ายขึ้น

1
คำถามไม่ได้เกี่ยวกับการค้นหาหรือค้นหารายการแบบเลื่อนลง เกี่ยวกับการเลือกป้ายกำกับในเมนูแบบเลื่อนลงนั้น ฉันสามารถค้นหาเมนูแบบเลื่อนลง แต่ไม่รู้ว่าจะเรียกใช้วิธีใดใน Selenium 2 เนื่องจาก select () และ getSelectedValue () หรือ getSelectedLabel () ไม่ทำงานใน Selenium 2
user786045

คำตอบ:


184

ดูหัวข้อเกี่ยวกับการกรอกแบบฟอร์มโดยใช้ webdriver ในเอกสารเกี่ยวกับซีลีเนียมและ javadoc สำหรับคลาสSelect

ในการเลือกตัวเลือกตามป้ายกำกับ:

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

ในการรับค่าแรกที่เลือก:

WebElement option = select.getFirstSelectedOption()

By.xpath ("// path_to_drop_down") ฉันจะแทนที่สิ่งนี้ด้วยตัวระบุตำแหน่งเช่น By.name เป็นต้น
Daniel

2
ยกเลิกการเลือกทั้งหมดจะแสดง UnsupportedOperationException หากการเลือกไม่รองรับการเลือกหลายรายการ
Tom Hartwell

4
ใน C # ใช้คลาส SelectElement ดังนั้น:SelectElement salesExecutiveDropDown = new SelectElement(webDriver.FindElement(By.Id("salesExecutiveId")));
Jeremy McGee

Fyi รหัสนี้ไม่สามารถเลือกรายการแบบเลื่อนลงได้จนกว่าฉันจะแสดงความคิดเห็นในบรรทัดนี้: //select.deselectAll (); จากนั้นก็เริ่มทำงาน ระยะทางของคุณอาจแตกต่างกันไป
gorbysbm

1
โปรดทราบว่าdeselectAllจะใช้ได้เฉพาะสำหรับ multiselect: selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/...
user1205577


4

ในทับทิมสำหรับการใช้งานอย่างต่อเนื่องเพิ่มดังต่อไปนี้:

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


0

ตัวเลือกที่คล้ายกับสิ่งที่แจนเดอร์สันโพสต์ไว้ข้างต้นก็เพียงแค่ใช้เมธอด. GetAttribute ในซีลีเนียม 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
    }
}

0

คุณสามารถทำได้ดังนี้:

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

วิธีนี้จะคืนค่าที่เลือกไว้สำหรับเมนูแบบเลื่อนลง

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 = Selector.getFirstSelectedOption ();

element.getText ();

จะส่งคืนองค์ประกอบทั้งหมดในเมนูแบบเลื่อนลง


-2

นี่คือรหัสสำหรับเลือกค่าจากเมนูแบบเลื่อนลง

ค่าสำหรับ 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));
    }
}

ขอบคุณ

เรข่า.


4
-1 วิธีที่ซับซ้อนเกินไปและใช้เมธอดที่เลิกใช้ (RenderedWebElement)
Ardesco
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.