• 【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
    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)
     
     
  • 相关阅读:
    spring boot指定外部配置的坑
    beego 批量删除问题
    spark 安装
    HttpServletRequest 获取cookie
    k8s 代码生成
    k8s 各种示例
    mysql-operator
    k8s Docker私有仓库认证
    Failed to introspect annotated methods on class 异常
    P6272 没有人的算术
  • 原文地址:https://www.cnblogs.com/ANT-earth-0711/p/11229752.html
Copyright © 2020-2023  润新知