selenium處理select標簽的下拉框


 

  有時候我們會碰到<select></select>標簽的下拉框。直接點擊下拉框中的選項不一定可行。Selenium專門提供了Select類來處理下拉框。

<select id="status" class="form-control valid" onchange="" name="status">
    <option value=""></option>
    <option value="0">未審核</option>
    <option value="1">初審通過</option>
    <option value="2">復審通過</option>
    <option value="3">審核不通過</option>
</select>

 

 

Python                                             

  先以python為例,查看Selenium代碼select.py文件的實現:

  ...\selenium\webdriver\support\select.py 

class Select:

    def __init__(self, webelement):
        """
        Constructor. A check is made that the given element is, indeed, a SELECT tag. If it is not,
        then an UnexpectedTagNameException is thrown.

        :Args:
         - webelement - element SELECT element to wrap
        
        Example:
            from selenium.webdriver.support.ui import Select \n
            Select(driver.find_element_by_tag_name("select")).select_by_index(2)
        """
        if webelement.tag_name.lower() != "select":
            raise UnexpectedTagNameException(
                "Select only works on <select> elements, not on <%s>" % 
                webelement.tag_name)
        self._el = webelement
        multi = self._el.get_attribute("multiple")
        self.is_multiple = multi and multi != "false"

  查看Select類的實現需要一個元素的定位。並且Example中給了例句。

  Select(driver.find_element_by_tag_name("select")).select_by_index(2)

def select_by_index(self, index):
        """Select the option at the given index. This is done by examing the "index" attribute of an
           element, and not merely by counting.

           :Args:
            - index - The option at this index will be selected 
           """
        match = str(index)
        matched = False
        for opt in self.options:
            if opt.get_attribute("index") == match:
                self._setSelected(opt)
                if not self.is_multiple:
                    return
                matched = True
        if not matched:
            raise NoSuchElementException("Could not locate element with index %d" % index)

  繼續查看select_by_index() 方法的使用並符合上面的給出的下拉框的要求,因為它要求下拉框的選項必須要有index屬性,例如index=”1”。

 

def select_by_value(self, value):
        """Select all options that have a value matching the argument. That is, when given "foo" this
           would select an option like:

           <option value="foo">Bar</option>

           :Args:
            - value - The value to match against
           """
        css = "option[value =%s]" % self._escapeString(value)
        opts = self._el.find_elements(By.CSS_SELECTOR, css)
        matched = False
        for opt in opts:
            self._setSelected(opt)
            if not self.is_multiple:
                return
            matched = True
        if not matched:
            raise NoSuchElementException("Cannot locate option with value: %s" % value)

  繼續查看select_by_value() 方法符合我們的需求,它用於選取<option>標簽的value值。最終,可以通過下面有實現選擇下拉框的選項。

from selenium.webdriver.support.select import Select …… sel = driver.find_element_by_xpath("//select[@id='status']") Select(sel).select_by_value('0')  #未審核
Select(sel).select_by_value('1')  #初審通過
Select(sel).select_by_value('2')  #復審通過
Select(sel).select_by_value('3')  #審核不通過

 

 

 

Java                                                     

   當然,在java中的用法也類似,唯一不區別在語法層面有。

package com.jase.base; import org.openqa.selenium.WebDriver; import org.openqa.selenium.By.ById; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.support.ui.Select; public class SelectTest { public static void main(String[] args){ WebDriver driver = new ChromeDriver(); driver.get("http://www.you_url.com"); // ……
 Select sel = new Select(driver.findElement(ById.xpath("//select[@id='status']"))); sel.selectByValue("0"); //未審核
        sel.selectByValue("1"); //初審通過
        sel.selectByValue("2"); //復審通過
        sel.selectByValue("3"); //審核不通過
 } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM