zoukankan      html  css  js  c++  java
  • 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文件的实现:

      ...seleniumwebdriversupportselect.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 
    
                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"); //审核不通过
        }
    }
  • 相关阅读:
    [轉]Linux kernel <2.6.29 exit_notify() local root exploit分析(2009-1337)
    [轉]udp_sendmsg空指针漏洞分析 by wzt
    linux 中mmap的用法
    [轉]Exploit The Linux Kernel NULL Pointer Dereference
    [轉]Exploit Linux Kernel Slub Overflow
    Linux 2.6.x fs/pipe.c local kernel root(kit?) exploit (x86)
    字符串哈希专题
    树形DP
    ACM中的正则表达式
    回文树学习笔记
  • 原文地址:https://www.cnblogs.com/fnng/p/5361443.html
Copyright © 2011-2022 走看看