【selenium】基於python語言,如何用select選擇下拉框


在項目測試中遇到了下拉框選擇的控件,來總結下如何使用select選擇下拉框:

  下圖是Select類的初始化描述,意思是,給定元素是得是select類型,不是就拋異常。接下來給了例子:要操作這個select,先要定位到,然后再通過select_by_index 選擇下拉框

 
         
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"
 

1、select_by_value:

看下代碼:
    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

           throws NoSuchElementException If there is no option with specisied value in SELECT
           """
        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)

 就是說使用這個方法,下拉框屬性需要有value,如果選項中不具有指定值的項,就拋異常。例如:

 
 
        
2、select_by_index
看下代碼:
 1     def select_by_index(self, index):
 2         """Select the option at the given index. This is done by examing the "index" attribute of an
 3            element, and not merely by counting.
 4 
 5            :Args:
 6             - index - The option at this index will be selected
 7 
 8            throws NoSuchElementException If there is no option with specisied index in SELECT
 9            """
10         match = str(index)
11         for opt in self.options:
12             if opt.get_attribute("index") == match:
13                 self._setSelected(opt)
14                 return
15         raise NoSuchElementException("Could not locate element with index %d" % index)

 

 這個是通過元素的“index”屬性來完成



3、select_by_visible_text
看下代碼:
 
 1     def select_by_visible_text(self, text):
 2         """Select all options that display text matching the argument. That is, when given "Bar" this
 3            would select an option like:
 4 
 5             <option value="foo">Bar</option>
 6 
 7            :Args:
 8             - text - The visible text to match against
 9 
10             throws NoSuchElementException If there is no option with specisied text in SELECT
11            """
12         xpath = ".//option[normalize-space(.) = %s]" % self._escapeString(text)
13         opts = self._el.find_elements(By.XPATH, xpath)
14         matched = False
15         for opt in opts:
16             self._setSelected(opt)
17             if not self.is_multiple:
18                 return
19             matched = True
20 
21         if len(opts) == 0 and " " in text:
22             subStringWithoutSpace = self._get_longest_token(text)
23             if subStringWithoutSpace == "":
24                 candidates = self.options
25             else:
26                 xpath = ".//option[contains(.,%s)]" % self._escapeString(subStringWithoutSpace)
27                 candidates = self._el.find_elements(By.XPATH, xpath)
28             for candidate in candidates:
29                 if text == candidate.text:
30                     self._setSelected(candidate)
31                     if not self.is_multiple:
32                         return
33                     matched = True
34 
35         if not matched:
36             raise NoSuchElementException("Could not locate element with visible text: %s" % text)

 

 通過選擇文本來匹配,然后給出了例子。看下我的例子:

 我的代碼:

 

1    stafftype_loc = (By.XPATH, "//select[@ng-model='Invite.type']")
2        
3      find_element(*self.stafftype_loc).send_keys(stftype)

 

 

 
 

 


免責聲明!

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



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